swift中?和!用的比较多,所以记录一下进行
使用?的时候,表面的看来可以允许选取的参数赋值为nil,这个时候在使用参数的时候必须加上!或者是加入官方说明的if判断
func testStr(){
var str : String ?= "hello"
// var result = str + " world" // 编译的时候出现错误,这个地方必须加上!因为str的时候可能是nil,下面的语句是不通的
var result = str! + "world"// 如果使用的是str,要加入!确保编译通过
str = nil
// result = str! + "world"// 运行出错,因为表示参数可能为nil,这个时候,程序是可以进行赋值为nil 的操作的,所以在做操作的时候,需要做判断处理
if let isnull = str{
println(" str is not null")
}else{
println("str is null")
}
}结果: str is null
使用!的时候,表示你定义的时候参数不能为null,总的相当于?反着看,虽然你可以再里面进行一些赋值nil的操作,但是编译的时候是通不过的
func testStr(){
var str : String! = "hello"
var result = str + "world"// 没有任何的问题,因为这个地方定义的就是!,所以已经确定str不为空,改语句的成立
str = nil
result = str + "world"// 编译没事,但是运行的时候出错
result = str! + "world"// 编译没事,但是运行的时候出错
if let isnull = str{
print("str is not null")
}else{
print("str is null")
}
}
如果不能使用?和!的时候
func testStr(){
var str : String = "hello" // 没有任何问题
// str = nil // 这个地方是不可以进行赋值为nil操作的
// result = str? + "world"// 编译出错
// result = str! + "world" // 编译出错
}
if let isnull = str {// 这个地方就不能这样用了,因为这种方法只是适用于optional type
print("str is null")
}else{
print("str is null")
}
}