在swift中调用泛型函数

时间:2016-10-03 06:25:08

标签: swift

我有以下结构,变量和函数:

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

1 个答案:

答案 0 :(得分:0)

由于您的泛型类型参数是使用约束声明的,如下所示:

func myFunction<T: AnyObject>

因此,无论您使用何种类型,它都必须是引用类型或实现NSObjectProtocol或类似的东西。

swift结构是一种值类型,因此MyModel不能用作泛型类型参数。

解决方案:

  • 将通用类型约束更改为<T: Any>,使其接受值类型。

  • 删除泛型类型约束。

  • 将结构更改为类并添加初始值设定项。