我可以有多個模型,它們可以在一個陣列中,也可以不在一個陣列中,例如:
[Model1]或Model或[Model2]或[String: [Model2]]
這是我重用相同功能的嘗試:
/// Decode existing file on disk
func decodeFileStoredInDisk(modelToDecode: Any, fileName: String, fileExtension: String) -> Any? {
var decodedFile: Any = []
do {
let fileURL = try FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent(fileName fileExtension)
let data = try Data(contentsOf: fileURL)
decodedFile = try JSONDecoder().decode(modelToDecode.self, from: data)
} catch {
print("?? Error decoding file disk: \(error)")
}
return decodedFile
}
我遇到的問題是它抱怨:
Cannot convert value of type 'Any' to expected argument type 'Any.Protocol'
我嘗試了以下建議:
decodedFile = try JSONDecoder().decode(modelToDecode.self as! Any.Protocol, from: data)
但仍然抱怨:
Protocol 'Any' as a type cannot conform to 'Decodable'
錯誤在modelToDecode,如果我輸入確切的模型:[Model1]它喜歡那個。
我如何在那里使用任何型別?
uj5u.com熱心網友回復:
解碼器需要知道靜態型別,因此Any根本不支持。
使用限制為Decodable喜歡這個的泛型型別
func decodeFileStoredInDisk<T : Decodable>(modelToDecode: T.Type, fileName: String, fileExtension: String) throws -> T {
let fileURL = try FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent(fileName)
.appendingPathExtension(fileExtension)
let data = try Data(contentsOf: fileURL)
return try JSONDecoder().decode(T.self, from: data)
}
該函式將一個可能的錯誤傳遞給呼叫者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384047.html
標籤:迅速
