gpt4 book ai didi

Swift 将 Generic 转换为具有 nil 值的 Optional 会导致 fatalError

转载 作者:可可西里 更新时间:2023-11-01 00:52:32 24 4
gpt4 key购买 nike

使用 Swift 2,在我设计的示例中,我将 String 转换为 Int 或更具体地说是 Int Int? 使用泛型。在 Int? 应该为 nil 的情况下,转换将失败并出现 fatalError: fatal error: unwrapping an Optional value

这些看起来可能是相似/重复的问题:

我的问题是:应该如何转换为 nil 的可选值?

例子:

class Thing<T>{
var item: T

init(_ item: T){
self.item = item
}
}

struct Actions{

static func convertIntForThing<T>(string: String, thing:Thing<T>) -> T{
return convertStringToInt(string, to: T.self)
}

static func convertStringToInt<T>(string: String, to: T.Type) -> T{
debugPrint("Converting to ---> \(to)")

if T.self == Int.self{
return Int(string)! as! T
}

// in the case of "" Int? will be nil, the cast
// here causes it to blow up with:
//
// fatal error: unexpectedly found nil while unwrapping an
// Optional value even though T in this case is an Optional<Int>
return Int(string) as! T

}
}


func testExample() {
// this WORKS:
let thing1 = Thing<Int>(0)
thing1.item = Actions.convertIntForThing("1", thing: thing1)

// This FAILS:
// empty string where value = Int("")
// will return an Optional<Int> that will be nil
let thing2 = Thing<Int?>(0)
thing2.item = Actions.convertIntForThing("", thing: thing2)
}

testExample()

最佳答案

你不能 nil 转换为 some-kind-of-nil,但是你可以make some-kind-of-nil,正如这个人为的例子所示:

    func test(s:String) -> Int? {
var which : Bool { return Int(s) != nil }
if which {
return (Int(s)! as Int?)
} else {
return (Optional<Int>.None)
}
}

print(test("12"))
print(test("howdy"))

关于Swift 将 Generic 转换为具有 nil 值的 Optional 会导致 fatalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com