【发布时间】:2016-02-14 09:56:12
【问题描述】:
我这样声明了一个协议
protocol JSONConnection {
var request: NSURLRequest { get set }
var session: NSURLSession { get set }
var jsonRootObject: JSONSerializable? { get set }
}
这里,JSONSerializable 不是一个实际的类型,它是我这样声明的另一个协议:
protocol JSONSerializable {
func readFromJSON(json: JSON) throws
}
所以,事实上,这个 JSONConnection 协议需要一个名为 jsonRootObject 的变量,它只需要符合 JSONSerializable 协议即可。
很好。
现在,对于实现。
我创建了一个名为 JSONStockDetailRootObject 的类,它符合 JSONSerializable 协议。
class JSONStockDetailRootObject: JSONSerializable
我想创建一个符合 JSONConnection 协议的 StockConnection 类。
class StockConnection: JSONConnection {
var request: NSURLRequest
var session: NSURLSession
var jsonRootObject: JSONStockDetailRootObject?
}
我认为,如果我有一个符合 JSONSerializable 协议的类型的 jsonRootObject 变量,那么 StockConnection 类将反过来符合 JSONConnection 协议......但不是。
编译器声称:“协议要求属性 'jsonRootObject' 类型为 'JSONSerializable?'
我错过了什么? 谢谢
【问题讨论】:
-
您更改了
jsonRootObject的类型。现在它不再符合。
标签: swift protocols swift-protocols