2017-07-05 22 views
0

私はXcode 8のSwiftの委任プロセスを学んでいます。デリゲートをサブクラス化する適切な方法は何ですか?

私はそれをうまく動作させることができますが、私の代理人のサブクラスについて質問があります。通常、Objective-Cでは、このサブクラスはNSObjectになります。私はそれをNSObjectAnyObjectと一緒に働かせることができます。パフォーマンスのためにObjective-Cを渡さないという記事を読んだ。これは本当に重要ですか?ビューや他のタイプのコントローラでない場合、オブジェクトのSwiftのサブクラスは何ですか?

AnyObjectNSObjectと同じですか?

のViewController

import UIKit 

class ViewController: UIViewController, TestDelegate { 
    // init the delegate 
    let theDelegate = TheDelegate() 

    @IBOutlet weak var label1: UILabel! 

    @IBAction func button1(_ sender: Any) { 
     // tell the delegate what to do 
     theDelegate.run(add: 1) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     theDelegate.delegate = self 
    } 

    // the protocol 
    func didTest(int: Int) { 
     label1.text = "\(int)" 
     print ("Got back from delegate \(int)") 
    } 
} 

オブジェクトTestProtocol.swift

import Foundation 

protocol TestDelegate: class { 
    func didTest(int: Int) 
} 

class TheDelegate: AnyObject{ 
    weak var delegate: TestDelegate? 
    func run(add: Int){ 
     let test = add + 1 
     delegate?.didTest(int: test) 
    } 
} 
+1

ルックTheDelegate'は 'AnyObject'(または他のクラス)を拡張するために'理由はありません。 – rmaddy

+0

そして、あなたはプロトコルをサブクラス化していません。 'ViewController'はプロトコルに準拠していますが、投稿したコードにはないデリゲートのサブクラスはありません。 – rmaddy

+0

@rmaddyに続いて、あなたは混乱しているように見えます: 'NSObject'(クラス)は何のサブクラスでもなく、ほとんどのObjective-Cオブジェクトの* superclass *です。現時点ではありません)。 – CRD

答えて

0

すべてが(Javaでobjectのような)既存によりちょうどAnyObjectあるので、AnyObjectをサブクラス化する理由は、ありません。あなたが持っているために欠けている場合は、あなたのプロトコルやクラスが、それはどちらか@objcをマークしなければならないか、またはそれがNSObjectをサブクラス化しなければならないのObj-Cのコードで見られるよう

NSObjectは、OBJの-Cで、古いベース・クラスです。

したがって、あなたのプログラムでObj-Cも使用しているのでなければ、NSObjectをサブクラス化する必要はありません。 Swift 3: subclassing NSObject or not? https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

関連する問題