Swift中?和!的区别

原文:http://blog.csdn.net/hnuzengchao/article/details/50059887

1.常量和变量

Swift语言中是用let来定义常量,并且要初始化。var来定义变量,在let或者var后面申明类型,冒号+空格,然后再加上类型名称。


2.optional(可选)变量

可选变量用于处理值缺失的情况,有点类似于OC中的nil,可以用于任何类型上,不仅仅是类,不过更加安全。Swift是类型安全的一门语言,可以很少申明类型。

附:Swift和Objective-C中nil的区别

1)OC中,nil是一个指向不存在对象的指针;

2)Swift中,nil不是指针,它是一个确定的值,用于表示值缺失。任何类型的可选状态都可以设置为nil,不只是对象类型;


3.深入了解Optional变量

Optional其实就是一个enum,里面有None和Some类型。nil就是Optional.None,非nil就是Optional.Some,通过Some(T)包装原始值,所以在是用Optional的时候要进行拆包。

声明一个可选类型的时候要在类型后面加上? 如:var str : String?

var strValue: String? 

意思不是“我声明了一个Optional的String值”,而是我声明了一个Optional类型值。


对一个可选类型的值,需要进行拆包才不会报错。

拆包有两种方式,如下:

1)Optional Binding

如:  if let str = strValue {

        let hashValue = str.hashValue

    }

2)通过! str!


对于会在viewDidLoad进行初始化的变量,可以直接定义为var str :String!叫做Implicitly Unwrapped Optionals,称为隐式拆包,在进行操作的时候也需要添加!进行拆包。


?的使用场景:

1)声明Optional值变量

2)在对Optional值操作中,用来判断是否能响应后面的操作


!的使用场景:

1)强制对Optional值进行拆包

2)声明隐式拆包变量,一般用于类中的属性


如果你在隐式解析可选类型没有值的时候进行取值,会crash。和在没有值的可选类型里面拆包是一样的。


4.总结

       可选类型在swift里面十分重要,在做项目的过程,要尤为重视可选变量,不然应用跑起来老是crash,并且debug也不方便找出错误来,不过Xcode提示功能也很不错,这里赞一个。总之,一定要谨慎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `as` 是强制类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,会触发一个运行时错误。 `as!` 是强制类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,会触发一个运行时错误。它与 as 类似,但是它更加强烈地说明了类型转换是成功的。 `as?` 是可选类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,则返回 nil。 如下是一个简单的例子 ``` swift let num: Any = 5 let intNum = num as? Int print(intNum) // Optional(5) ``` 如果这里 `as` 或 `as!` 那结果就会是5,而不是Optional(5) ### 回答2: 在Swift语言,as、as!和as?是用于类型转换的关键字。 as用于向下转型。它可以将一个具有指定类型的实例转换为另一个类型。如果转换成功,则返回一个可选型的结果;如果转换失败,则会导致程序运行时错误。所以,我们在使用as进行类型转换时,需要在转换之前使用条件判断来确保转换的安全性。 as!用于强制向下转型,它与as的区别在于,如果转换失败,会导致程序崩溃。因此,在使用as!进行类型转换时,要确保转换一定会成功,否则会导致运行时错误。 as?是可选型向下转型的关键字。它尝试将一个具有指定类型的实例转换为另一个类型,如果转换成功,则返回一个可选型的结果;如果转换失败,则返回nil。所以,在使用as?进行类型转换时,我们需要对转换结果进行判断,以处理转换成功和转换失败的情况。 总结:as用于向下转型,可能会导致运行时错误;as!表示强制向下转型,如果转换失败会导致程序崩溃;as?表示可选型向下转型,如果转换失败会返回nil。在使用这些关键字进行类型转换时,需要明确转换的安全性。 ### 回答3: 在Swift,as、as!和as?是用于类型转换的关键字。 as是一种安全的类型转换方式,用于将一个对象转换为指定的类型。如果转换成功,则返回转换后的对象;如果转换失败,则返回nil。 as!是一种强制类型转换方式,用于将一个对象强制转换为指定的类型。它假设被转换的对象一定是指定的类型,如果转换失败,则会引发运行时错误。 as?是一种可选类型的类型转换方式,用于将一个对象转换为指定的可选类型。如果转换成功,则返回一个可选类型对象,其值为转换后的对象;如果转换失败,则返回nil。 这些类型转换关键字在Swift非常有用,可以帮助我们在处理不同类型的对象时进行安全、灵活的转换操作。需要根据转换的需求和对象的类型选择合适的类型转换方式,以确保代码的正确性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值