我想了解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對象的*超類*(並且你忽略了它所針對的目前不是)。 – CRD