我正在尝试学习 Xcode 8 中 Swift 的委托(delegate)过程。
我可以让它正常工作,但对我的委托(delegate)中的子类有疑问。通常,在 Objective-C 中,它的子类是 NSObject
。我能够让它与 NSObject
和 AnyObject
一起工作。我读了一篇关于因为性能而不跨越 Objective-C 的文章。这真的重要吗?如果它不是 View 或任何其他类型的 Controller ,那么对象在 Swift 中的子类是什么?
AnyObject
和 NSObject
一样吗?
View Controller
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)")
}
}
对象测试协议(protocol).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)
}
}
最佳答案
没有理由将 AnyObject
子类化,因为一切都是 AnyObject
只是存在(就像 Java 中的 object
)。
NSObject
是 Obj-C 中的旧基类,因此如果您希望在 Obj-C 代码中看到您的协议(protocol)或类,则必须将其标记为 @objc
或者它必须是 NSObject
的子类。
所以除非你也在你的程序中使用 Obj-C,否则你不需要继承 NSObject
。
看看 Swift 3: subclassing NSObject or not? https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
关于swift - 子类化委托(delegate)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44935151/