Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift将nil动态强制转换为可选_Swift - Fatal编程技术网

Swift将nil动态强制转换为可选

Swift将nil动态强制转换为可选,swift,Swift,以下代码起作用: nil as! String? "muffin" as! String? 因此,我也希望这能奏效: var magicArray: [Any?] = ["Muffin", nil, 3] class Box<T> { var index: Int init(index: Int){ self.index = index } func get() -> T { return magicAr

以下代码起作用:

nil as! String?
"muffin" as! String?
因此,我也希望这能奏效:

var magicArray: [Any?] = ["Muffin", nil, 3]

class Box<T> {

    var index: Int

    init(index: Int){
        self.index = index
    }

    func get() -> T {
        return magicArray[index] as! T //crash
    }

}
我需要能够将
Any?
值转换为类内的
T
,其中
T
可以是任何类型,包括可选的。
Any?
实际上来自
Any?
数组,因此没有其他方法可以验证它的类型是否正确
T


这可能吗?

如果您需要一个通用包装器,它应该适合您:

final class Wrapper<T> {
    final let wrappedValue: T
    init(theValue: T) {
        wrappedValue = theValue
    }
}

如果您需要一个通用包装器,这应该适合您:

final class Wrapper<T> {
    final let wrappedValue: T
    init(theValue: T) {
        wrappedValue = theValue
    }
}


你为什么需要这个?@Adam ORM库需要它。相信我,我需要它。对泛型说“任何”似乎完全没有理解泛型的意义。@matt我更新了我的答案,添加了更多的上下文。我真的错过了泛型的要点吗?问题的标题应该是“如何转换任何?到可选”。你为什么需要这个?@Adam ORM库需要它。相信我,我需要它。对泛型说“任何”似乎完全没有理解泛型的意义。@matt我更新了我的答案,添加了更多的上下文。我真的错过了泛型的要点吗?问题的标题应该是“如何转换任何?到可选”。我看不到从
any?
t
的任何强制转换。我不仅需要一个包装器,我还需要一个可以将
Any?
值转换为
t
的包装器。您还没有指定您的需求。为什么需要从
Any?
转换到
T
?对不起,我想我的示例已经清楚了这一点。我需要能够将
Any?
值转换为类内的
T
,其中
T
可以是任何类型,包括可选的。解释为什么我有一个
Any?
值非常复杂。
Any?
来自一个
Any?
数组,因此没有其他方法来验证它的类型是否正确
T
。包装器将使用
Any?
数组,并为每个数组使用正确的类型。我只是用字符串、int(可选或不可选)以及
Any?
数组对它进行了测试。工作得很好。我不知道我是否理解你为什么需要将它转换为其他类型。在我的类中,
T
是泛型类型。这取决于何时构造包装器对象并返回相同的类型。我看不到从
any?
t
的任何转换。我不仅需要一个包装器,我还需要一个可以将
Any?
值转换为
t
的包装器。您还没有指定您的需求。为什么需要从
Any?
转换到
T
?对不起,我想我的示例已经清楚了这一点。我需要能够将
Any?
值转换为类内的
T
,其中
T
可以是任何类型,包括可选的。解释为什么我有一个
Any?
值非常复杂。
Any?
来自一个
Any?
数组,因此没有其他方法来验证它的类型是否正确
T
。包装器将使用
Any?
数组,并为每个数组使用正确的类型。我只是用字符串、int(可选或不可选)以及
Any?
数组对它进行了测试。工作得很好。我不知道我是否理解你为什么需要将它转换为其他类型。在我的类中,
T
是泛型类型。它是在构建包装器对象并返回相同类型时确定的。
let box = Box<Int>(index: 2)
box.get()
final class Wrapper<T> {
    final let wrappedValue: T
    init(theValue: T) {
        wrappedValue = theValue
    }
}
var s : Any?

s = "some string"

let w = Wrapper(theValue: s)

w.wrappedValue

let int = 3

let w2 = Wrapper(theValue: int)

w2.wrappedValue

w2.wrappedValue = 3

let array : [Any?] = [s, int, nil, "abc", NSObject()]

for obj in array {
    let wrapper = Wrapper(theValue: obj)
}