【问题标题】:Swift: Downcasting to Generic Type in Function FailingSwift:在函数失败中向下转换为泛型类型
【发布时间】:2014-06-06 00:42:54
【问题描述】:

我有一个通用函数,它接受任何对象的值和一个类型为 T 的输入输出参数。我想通过将值向下转换为类型 T 来将输入输出参数设置为任何对象的值。

func genericFunction<T>(value:AnyObject, inout object:T) {

    if let castedValue = value as? T {
        object = castedValue
    }
}

当我调用我的函数时,对象的值没有设置,因为向下转换失败。

var object:String = "oldValue"
var newValue:String = "newValue"

genericFunction(newValue, &object)
println(object) // prints oldValue

【问题讨论】:

    标签: generics swift downcast


    【解决方案1】:

    通过将 AnyObject 更改为“Reflectable”解决。还与“任何”一起工作。 String 实际上并不符合 AnyObject。

    func genericFunction<T>(value:Any, inout object:T) {
        if let castedValue = value as? T {
            object = castedValue
        }
    }
    

    编辑: Any 是我想要使用的类型,因为 Reflectable 旨在用于 Reflection,而 String 恰好符合它。

    【讨论】:

    • 仅当值可桥接到 Any 时才有效。但是如果只有 AnyObjects 像 ObjC 对象(例如来自 NSDictionaries 的值)呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多