簡體   English   中英

符合通用函數中使用的協議和類的類型的變量

[英]Variable of type that conforms to protocol and class used in generic function

我想聲明一個變量

var specialVC: UIViewController & MyProtocol.

我有一個功能

func doStuff<T: UIViewController & MyProtocol> { ... }

但是,當我嘗試將變量傳遞給doStuff時,它說UIViewController不符合MyProtocol。

class MyClass: UIViewController {

    override func viewDidLoad() {
      super.viewDidLoad()
      var specialVC: UIViewController & MyProtocol
      doStuff(specialVC)
    }

    func doStuff<T: UIViewController & MyProtocol>(_ vc: T) {}

}

錯誤: Argument type 'UIViewController' does not conform to expected type 'MyProtocol'

-更新-

看完協議后不符合自身? ,我能夠創建一個擴展,該擴展指定一個符合協議的類。 但是,我將無法從此擴展程序調用doStuff()。

internal extension MyProtocol where Self: UIViewController {
     // call doStuff(self) here somehow?
}

關於您的功能,沒有什么需要通用的。 只需使用常規的類型和超類型機制(多態性,繼承,無論您喜歡用哪種方式)。 只需輸入您的參數作為超類型即可; 這告訴編譯器它繼承了超類型的所有功能。

protocol MyProtocol : UIViewController { // Swift 5 syntax
    var thingy : String { get set }
}
class MyViewController : UIViewController, MyProtocol {
    var thingy = "howdy"
}
func doStuff(_ vc: MyProtocol) {
    print(vc.title) // legal, because we know it's a view controller
    print(vc.thingy) // legal, because we know it's a MyProtocol
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM