Swift Int的扩展需要显式调用init
我正在用自己的init创建Int的扩展,但是我不能隐式地使用init。谁能解释一下原因吗?但是,我可以显式地调用init,如下所示Swift Int的扩展需要显式调用init,swift,Swift,我正在用自己的init创建Int的扩展,但是我不能隐式地使用init。谁能解释一下原因吗?但是,我可以显式地调用init,如下所示 extension Int { init?(fromHexString: String) { let HexRadix:Int = 16 let DigitsString = "0123456789abcdefghijklmnopqrstuvwxyz" let digits = DigitsString
extension Int {
init?(fromHexString: String) {
let HexRadix:Int = 16
let DigitsString = "0123456789abcdefghijklmnopqrstuvwxyz"
let digits = DigitsString
var result = Int(0)
for digit in fromHexString.lowercaseString {
if let range = digits.rangeOfString(String(digit)) {
let val = Int(distance(digits.startIndex, range.startIndex))
if val >= Int(HexRadix) {
return nil
}
result = result * Int(HexRadix) + val
} else {
return nil
}
}
self = result
}
}
let firstString = "ff"
//This works
let parsedInt:Int = Int.init(fromHexString: firstString)!
println("\(parsedInt)")
//But this does not ; Error: Int is not identical to Int? Why??
let parsedInt1:Int = Int(fromHexString: firstString)!
println("\(parsedInt1)")
您是否可以添加缺少的定义(例如,
digitstring
)以便示例能够编译?让HexRadix:Int=16让digitstring=“0123456789abcdefghijklmnopqrstuvwxyz”在PlayGround中像一个符咒一样工作您正在运行哪个版本的Xcode?对我来说似乎还可以,但有时玩得不好:)。请放入swift文件并编译。