1
我已經定義了一個協議和一個數組擴展。編譯器在擴展的編碼方法中調用flatMap時報告錯誤:無法轉換類型'T?'的值到閉合結果類型「_」爲什麼編譯器會抱怨我的變換參數爲FlatMap?
public protocol Encodable {
typealias Properties = Dictionary<String, Any>
func encode() -> Properties
init?(_ properties: Properties?)
}
extension Array where Element : Encodable.Properties {
func encode<T:Encodable>(type: T.Type) -> [T] {
return flatMap{ T($0) } // <= Compiler Error
}
}
- 編譯器已明顯發現,在可編碼協議中定義的初始化 - T($ 0)將產生一個T 1。
- flatMap有一個適當的重載應該產生一個[T]。
- 我不知道什麼「封閉結果類型'_'」可能意味着什麼。
的Xcode 8.3是使用SWIFT 3.1(也許我不應該Xcode更新?)
任何想法?
儘量只'flatMap(T.init)'。這不僅是可取的,但它也可能導致更有用的錯誤信息 – Alexander