什么是委托子类的正确方法?

时间:2017-07-05 20:10:50

标签: swift delegates

我试图在Xcode 8中学习Swift的委派过程。

我可以让它工作正常,但对我的委托中的子类有疑问。通常,在Objective-C中,它的子类是NSObject。我能够使用NSObjectAnyObject。我读了一篇关于因为性能而没有跨过Objective-C的文章。这真的很重要吗?如果它不是视图或任何其他类型的控制器,那么Swift中对象的子类是什么?

AnyObjectNSObject相同吗?

的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)
    }
}

1 个答案:

答案 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