swift - 子类化委托(delegate)的正确方法是什么?

标签 swift delegates

我正在尝试学习 Xcode 8 中 Swift 的委托(delegate)过程。

我可以让它正常工作,但对我的委托(delegate)中的子类有疑问。通常,在 Objective-C 中,它的子类是 NSObject。我能够让它与 NSObjectAnyObject 一起工作。我读了一篇关于因为性能而不跨越 Objective-C 的文章。这真的重要吗?如果它不是 View 或任何其他类型的 Controller ,那么对象在 Swift 中的子类是什么?

AnyObjectNSObject 一样吗?

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/

相关文章:

ios - 为动态创建的 UIPickerView 添加协议(protocol)

delegates - SFSpeechRecognitionTaskDelegate 委托(delegate)方法没有被调用

ios - 如果我通知操作已完成,我应该使用 PublishSubject 吗?

swift - 如何在 swift 中添加和检索 CGpoint 值到 NSmutable 字典中

ios - 删除与 imageView 一起使用的 subview

ios - 更新Xcode到7.0后出现错误

swift - 返回集合的切片类型

c# - 如何使 C# Create.Delegate 支持继承?

c# - 无参数匿名方法可以分配给有参数委托(delegate)

c# - 从 methodinfo 获取委托(delegate)