快速打开一个元组

时间:2015-07-07 12:38:40

标签: ios swift generics tuples unwrap

这对我来说似乎是有效的代码,但它没有打开元组

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()
}

1 个答案:

答案 0 :(得分:2)

您正在使用通用函数,然后像输入参数一样访问参数。

当然你的功能应该是......

func updateUserDefaults(data: (String, Any)) {
    println(data.1)
}

updateUserDefaults(("loop", true))

使用泛型时,并不意味着它会自动知道您传入的数据的类型架构。

这意味着它不知道您传递的数据的架构,但也不知道它不应该关心。

此外,参数data不是可选的,因此无需打开它。

你不能打开&#34;打开&#34;已知类型的通用参数。它不会那样工作。