私はXcode 8のSwiftの委任プロセスを学んでいます。デリゲートをサブクラス化する適切な方法は何ですか?
私はそれをうまく動作させることができますが、私の代理人のサブクラスについて質問があります。通常、Objective-Cでは、このサブクラスはNSObject
になります。私はそれをNSObject
とAnyObject
と一緒に働かせることができます。パフォーマンスのためにObjective-Cを渡さないという記事を読んだ。これは本当に重要ですか?ビューや他のタイプのコントローラでない場合、オブジェクトのSwiftのサブクラスは何ですか?
AnyObject
はNSObject
と同じですか?
の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)
}
}
で
ルックTheDelegate'は 'AnyObject'(または他のクラス)を拡張するために'理由はありません。 – rmaddy
そして、あなたはプロトコルをサブクラス化していません。 'ViewController'はプロトコルに準拠していますが、投稿したコードにはないデリゲートのサブクラスはありません。 – rmaddy
@rmaddyに続いて、あなたは混乱しているように見えます: 'NSObject'(クラス)は何のサブクラスでもなく、ほとんどのObjective-Cオブジェクトの* superclass *です。現時点ではありません)。 – CRD