【发布时间】:2014-08-16 23:53:35
【问题描述】:
我已经看到很多关于 Swift 中声明为 var a: String? 和 var a: String! 的变量的讨论,前者是 String 类型的可选变量,而后者是隐式展开的可选 String。据我了解,当某些内容被隐式展开时,会假设可选值中已经包含一个值。为了使用语法a!.toInt(),必须像这样进行外部检查:
if a != nil {
a!.toInt()
}
附带说明一下,最好将变量声明为可选类型,然后使用可选链解开该值(如果存在)。正在做:
if let numberString = a?.toInt() {
numberString.toInt()
}
在实际应用中是否应该使用访问像a!.toInt() 这样的变量?在我看来,您似乎是在询问运行时错误。
现在是实际问题。我正在查看文档,特别是NSArray 上的enumerateObjectsUsingBlock,并且块参数是使用! 声明的。这是否意味着该函数的编写者假设块参数将是非零?如果是这样,在该函数内部,以下之间的语义区别是什么:
func someMethodWithBlock(block:((String!)-> Void)!) {
var a = "Hello"
block.(a) //first syntax example
block?.(a)//2nd
block!.(a)//3rd
}
【问题讨论】: