【问题标题】:Unwrap a tuple in swift快速打开一个元组
【发布时间】:2015-07-07 12:38:39
【问题描述】:

这对我来说似乎是有效的代码,但它不会解开元组

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->() 提供

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

【问题讨论】:

    标签: ios swift generics tuples unwrap


    【解决方案1】:

    您正在使用泛型函数,然后像类型参数一样访问参数。

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

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

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

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

    另外,data 参数不是可选的,所以不需要解包。

    您不能将泛型参数“解包”为已知类型。那样不行。

    【讨论】:

    • 问题是这个方法将被称为一个接受 (T)->() 的方法,我将为此更新我的问题。但是当我尝试打开我的数据属性时,我会检查它是否是一个元组,所以我的问题仍然存在..
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2014-07-05
    • 2013-06-22
    • 1970-01-01
    • 2017-12-13
    • 2021-05-12
    相关资源
    最近更新 更多