2017-07-05 76 views
0

我想了解Xcode 8中Swift的授權過程。子類委託的正確方法是什麼?

我可以讓它工作得很好,但在我的代理中有一個關於子類的問題。通常,在Objective-C中,這個子類將是NSObject。我能夠使它與NSObjectAnyObject一起工作。我閱讀了一篇關於不要因性能而跨越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)") 
    } 
} 

對象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

沒有理由爲'TheDelegate'延長'AnyObject'(或任何其它類)。 – rmaddy

+0

而你沒有任何子類化協議。 'ViewController'符合協議,但您沒有任何委託的任何子類(至少不在您發佈的代碼中)。 – rmaddy

+0

從@rmaddy開始,你似乎混淆了術語:NSObject(類)不是任何東西的子類,而是大多數Objective-C對象的*超類*(並且你忽略了它所針對的目前不是)。 – CRD

回答

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

相關問題