對不起,標題...不知道該怎麼命名它。斯威夫特泛型和枚舉與拳擊
typealias JSON = AnyObject
typealias JSONArray = Array<AnyObject>
protocol JSONDecodable {
class func decode(json: JSON) -> Self?
}
final class Box<T> {
let value: T
init(_ value: T) {
self.value = value
}
}
enum Result<A> {
case Success(Box<A>)
case Error(NSError)
init(_ error: NSError?, _ value: A) {
if let err = error {
self = .Error(err)
} else {
self = .Success(Box(value))
}
}
}
func decode<T: JSONDecodable>(jsonArray: JSONArray?) -> Result<[T: JSONDecodable]> {
if let jsonArray = jsonArray {
var resultArray = [JSONDecodable]()
for json: JSON in jsonArray {
let decodedObject: JSONDecodable? = T.decode(json)
if let decodedObject = decodedObject {
resultArray.append(decodedObject)
} else {
return Result.Error(NSError()) //excuse this for now
}
}
return Result.Success(Box(resultArray)) // THE ERROR IS HERE !!!!
} else {
return Result.Error(NSError()) //excuse this for now
}
}
我得到的錯誤是:
不能轉換表達式的類型「框中爲鍵入 '[T:JSONDecodable]'
可能有人請解釋爲什麼我不能做到這一點,以及我如何解決它。
感謝
你的問題的標題把我嚇壞了:我還以爲你找打:) – 2014-11-24 12:06:00