标签:style class code ext color com
1
2
3
4
5
|
var
stringValue : String //error:
variable ‘stringValue‘ used before being initialized //let
hashValue = stringValue.hashValue // ^ let
hashValue = stringValue.hashValue |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
enum Optional<T>
: LogicValue, Reflectable { case None case Some(T) init() init(_
some: T) ///
Allow use in a Boolean context. func
getLogicValue() -> Bool ///
Haskell‘s fmap, which was mis-named func
map<U>(f: (T) -> U) -> U? func
getMirror() -> Mirror } |
1
|
var
strValue : String? |
1
2
3
|
if strValue
{ //do
sth with strValue } |
1
|
let
hashValue = strValue?.hashValue |
1
2
3
4
5
|
//error:
‘String?‘ does not have a member named ‘hashValue‘ //let
hashValue = strValue.hashValue // ^ ~~~~~~~~~ let
hashValue = strValue.hashValue |
1
2
3
|
if let
str = strValue { let
hashValue = str.hashValue } |
1
|
let
hashValue = strValue!.hashValue |
1
2
3
|
if strValue
{ let
hashValue = strValue!.hashValue } |
1
2
3
|
myLabel!.text
= "text" myLabel!.frame
= CGRectMake(0, 0, 10, 10) ... |
swift中的?和!使用起来其实并不像大家所说的那么费劲,简单理解主要包括以下几个要点:
1,如果你使用?就表面你可以允许你参数赋值为nil。这个时候在使用该参数用于赋值等操作的时候必须加上!或者是加入官方说明的if判断
func testStr(){
var str:String? = "hello"
//var result = str + "world"//编译错误,这个地方必须要加上!因为str可能是nil,如果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
2,!表示你定义的参数是不为null的。这个时候,虽然可以进行赋值为nil的操作,但是一旦你进行了赋值nil操作是编译不过的
func testStr(){
var str:String! = "hello"
var result = str + "world"//没有问题,这个地方因为定义的是!,所以str肯定不为空,改语句成立
str = nil
result = str + "world"//编译通过,但是运行时出错
result = str! + "world"//编译通过,但是运行时出错。
if let isnull=str{
println("str is not null");
}else{
println("str is null");
}
}
3,如果不适用!和?操作
func testStr(){
var str:String = "hello"
var result = str + "world"//没有问题
//str = nil //这个地方是不可以进行赋值为nil操作的。
//result = str? + "world"//编译不通过
//result = str! + "world"//编译不通过
iflet isnull=str{// 这个地方就不能这样用了,因为这种用法只使用于Optional type
println("str is not null");
}else{
println("str is null");
}
}
标签:style class code ext color com
原文地址:http://blog.csdn.net/jijunyuan/article/details/29427479