这对我来说似乎是有效的代码,但它没有打开元组
func updateUserDefaults<T>(data:T) {
if let data = data as? (String, Any) {
println(data.1)
}
}
updateUserDefaults(("loop", true))
我的目标是使其成为NSUserDefaults的通用设置器。 我使用泛型的原因是我可以在我的反应代码中轻松传递它 如下所示(接下来需要T->()函数:
loop.producer |> map { ("loop", $0) } |> start(next: updateUserDefaults)
更新:
似乎这似乎有效,它可以解开并可以提供为T-&gt;()
func updateUserDefaults<T>(data:(String, T)) {
if let value = data.1 as? Bool {
userDefaults.setBool(value, forKey: data.0)
} else if let value: AnyObject = data.1 as? AnyObject {
userDefaults.setObject(value, forKey: data.0)
}
userDefaults.synchronize()
}
答案 0 :(得分:2)
您正在使用通用函数,然后像输入参数一样访问参数。
当然你的功能应该是......
func updateUserDefaults(data: (String, Any)) {
println(data.1)
}
updateUserDefaults(("loop", true))
使用泛型时,并不意味着它会自动知道您传入的数据的类型架构。
这意味着它不知道您传递的数据的架构,但也不知道它不应该关心。
此外,参数data
不是可选的,因此无需打开它。
你不能打开&#34;打开&#34;已知类型的通用参数。它不会那样工作。