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