我试图在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)")
}
}
Object 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)
}
}
答案 0 :(得分:0)
没有理由继承AnyObject
,因为现有的一切都是AnyObject
(如Java中的object
)。
NSObject
是Obj-C中的旧基类,因此如果您希望在Obj-C代码中看到您的协议或类,则必须将其标记为@objc
或者它必须是子类NSObject
。
因此,除非您在程序中也使用Obj-C,否则您不需要继承NSObject
。
看看 Swift 3: subclassing NSObject or not? https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html