Swift 关于数据类型、可选类型

类型别名

给数据类型取别名。比如给Int数据类型取别名,一个叫小孩,一个叫少年,一个叫青年,一个叫老年。实际上都是Int数据类型,只不过在代码阅读的时候,方便理解得多。

给数据类型取别名,使用typealias关键字。

    typealias child = Int
    typealias Teenager = Int
    typealias young = Int
    typealias old = Int

类型转换

强制转换:()

    var a = 11
    var b = String(a)

?? 语法:
当我们强制转换一个数据类型的时候,如果转换不了,那么就告诉编译器,转换不了的时候,取我??符号后面的值。

    var a = "hello"
    var b = 12
    b = b + Int(a)??10

此时a的值是非数字字符串类型,所以转不了Int,因此会取??后面的10作为参数,最终b的赋值为12+10=22.

可选类型:问号?与 感叹号!

当我们用var来定义变量而不赋初始值的时候,系统就会报错。因为swift需要值的内容来确定该变量的数据类型,并不会像java、oc等语言一样,给没有初始化的变量赋初始值。

而在声明变量的时候,在声明类型的右侧加上“ ? ”,则表示该变量有可能为空,有可能不为空。这时候编译器就不会强制给该变量赋初始值了,也就不会报错了。

在开发中,空nil也是一种数据类型
我们经常会碰到,有些变量比如Button暂时为空,仅仅是先声明有这么一个Button,还没有初始化赋值,这种情况在所难免。
由于Swift是强类型语言,Button的类型应该是UIButton而不是nil空类型,Swift中必须要明确每个变量与值的类型一一对应上,因此,当Button = nil 时会报类型不匹配的错误。
遇到这种情况可以声明该值可能为空的变量为可选类型

另外,比如String的可选类型和String类型不是同一种类型,在进行赋值的时候也是会报错的。

func getSomeString()->String?{
	......
}

let someString:String = getSomeString()//错误
//因为getSomeString()方法返回的是一个可选的String类型,
//和someString变量所声明的String类型不是同一种类型,所以编译不通过。

let someString:String= getSomeString()//正确
可选类型的声明方式:
//方式1:
var button : Optional<UIButton> = nil
//方式2:
var name : String? = nil

如果我们确定某变量有值,可以在其右侧加上“ ! ”进行强制解包, 则表示告诉编译器该变量不为空,使得可以直接取出Optional当中的值。但如果该变量为nil而进行了强制解包,则会导致系统崩溃。如果真的需要进行强制解包的操作,建议在解包前,先对变量是否为nil做一下判断。

var year : Int = 100	//对的
year = nil	//报错
var years : Int= 100	//对的
years = nil	//允许编译通过
可选绑定:

使用可选绑定写法就不需要加!进行强制解包了。

var string : String?
if let year = string {
    print("year is \(year)")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值