簡體   English   中英

為什么類型不符合協議?

[英]Why does the type not conform to protocol?

我們有以下代碼:

protocol ItemView {

    var image: UIImage? { get set }
}

 class BaseController<T: UIView where T: ItemView>: UIViewController {

    var itemView = T()
}

class ConcreteItemController: BaseController<UIImageView> {

}

對於BaseController,我收到一條錯誤消息,說“類型”UIImageView“不符合協議”ItemView“”。

但為什么?

我執行此操作時會顯示相同的錯誤消息:

 typealias ConcreteItemController = BaseController<UIImageView> 

我真的在這里遺漏了一些東西......為什么UIImageView不符合ItemView協議? 它有一個可選的圖像屬性..那么問題出在哪里?

UIImageView沒有聲明它符合ItemView 因為swift是一種嚴格類型的語言,它不會推斷出與協議的一致性,因為某些類型只會偶然符合。 你可以這么說:

protocol ItemView {

    var image: UIImage? { get set }
}

class BaseController<T: UIView where T: ItemView>: UIViewController {

    var itemView = T()
}

extension UIImageView: ItemView {}

class ConcreteItemController: BaseController<UIImageView> {

}

暫無
暫無

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

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