【发布时间】:2017-12-09 15:34:38
【问题描述】:
我正在尝试学习 Xcode 8 中 Swift 的委托过程。
我可以让它正常工作,但是对我的委托中的子类有疑问。通常,在 Objective-C 中,它的子类是NSObject。我可以让它与NSObject 和AnyObject 一起工作。我读了一篇关于因为性能而没有跨越 Objective-C 的文章。这真的重要吗?如果它不是视图或任何其他类型的控制器,那么 Swift 中对象的子类是什么?
AnyObject 和 NSObject 一样吗?
视图控制器
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(或任何其他类)。 -
而且你没有在任何地方子类化协议。
ViewController符合协议,但您没有任何委托的任何子类(至少在您发布的代码中没有)。 -
从@rmaddy 开始,您似乎混淆了术语:
NSObject(类)不是任何东西的子类,而是大多数 Objective- 的 superclass C 对象(而你并忽略那些暂时不适用的对象)。 -
还有
NSObject,协议,NSObject类都符合。 Swift 的AnyObject也是一个协议,它和NSObject协议,而不是类,具有相似的含义/目的。