我有以下结构,变量和函数:
struct MyModel {
var keyString: String
var keyNum: Int
}
let data = "{\"keyString\": \"valueString\", \"keyNum\": 1 }"
func myFunction<T: AnyObject>(str: String) throws -> T? {
return nil
}
如何使用MyModel调用该函数?下面的代码让编译器抱怨:“无法推断出通用参数'T'”
let myModel = try? myFunction(str: data) as? MyModel
链接到Swift REPL:http://swiftlang.ng.bluemix.net/#/repl/57f1fa479ce3c95fc38e63b3
答案 0 :(得分:0)
由于您的泛型类型参数是使用约束声明的,如下所示:
func myFunction<T: AnyObject>
因此,无论您使用何种类型,它都必须是引用类型或实现NSObjectProtocol
或类似的东西。
swift结构是一种值类型,因此MyModel
不能用作泛型类型参数。
解决方案:
将通用类型约束更改为<T: Any>
,使其接受值类型。
删除泛型类型约束。