Swift入门之数据类型

来源:互联网 发布:网络教育专升本 编辑:程序博客网 时间:2024/05/29 17:13

Swift入门之数据类型

Swift包含了C和OC上所有的数据类型:

  • OC 基本类型 int CGFloat double NSInteger NSNumber NSString Bool 集合类型:NSArray NSDictonary NSSet
  • Swift 对应为Int Float double true fause String 集合类型:Array/Dictonary/Set

Swift新添加数据类型:

  • 元组:Tuple,元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以使用一个元组返回多个值.
  • 可选类型:Optional,用于处理值缺失的情况.可选表示:那有一个值 ,并且其等于x 或者 那没有值. 有点像OC中的nil,但其可用在任何类型上,不仅仅是类,可选类型比OC中的nil指针更加安全也更具表现力,其是Swift许多强大特性的重要组成部分.
  • Swift是一门类型安全的语言.

常量和变量

常量 let nameStr = "mmmm"变量 var ageNum = 26可写多个var ageNum1 = 26,ageNum2 = 27,ageNum3 = 6

类型标注

当你声明常量或变量时 可以加上类型标注,说明常量或变量中存储的值的类型

格式: 在常量或变量后面 添加 : 然后加上类型名称,经验证加空格不可以

let tag3:Int = 300var tag4:Float = 12.3var tag1,tag2,tag3:Double

两者的命名

  • 可以使用任何你喜欢的字符作为常量或变量的名字,包括Unicode字符甚至表情
  • 名字不能包含数学符号 箭头 保留的Unicode码位,连线与制表符
  • 不能以数字开头但是其他地方可以使用数字比如中间或末尾

注释

允许注释嵌套注释

分号

  • 不强制使用;
  • 在同一行内写多条语句时,需加上

整数

  • 包括有符号 无符号 零
  • Swift提供了8 16 32 64位的有符号和无符号的整数类型,命名方式和C语言的命名很像. Uint8无符号8位 Int32 有符号32位
  • Swift提供了一个特殊的整数类型Int,长度和当前平台的原生字长相同.(比如,在32位平台上,Int和Int32长度相同;在64位平台上,其和Int64长度相同),一般来说使用Int足够了.

Uint的小结:
其与Int对比,一般建议使用Int.避免类型转换

浮点数

  • 浮点类型比整数类型的范围更大,可存储比Int类型更大或更小的数字
  • Swift提供了两种有符号浮点数类型:Double(64位) Float(表示32位浮点数)

整数转换

主要指不同进制之间的相加减时,要转化为数制一致.

 let widthNum:Int8  = 1 let heightNum:Int16  = 500 let mySum = heightNum + Int16(widthNum) //输出的四种表达方式 print(mskWidth,widthNum,heightNum,mySum)

浮点数与整数之间的转换

两者之间转换必须是显式的.

let mskWidth = 10.0let mmNum = 10let nnNum = mskWidth + Double(mmNum)      let aaNum = 10.3let bbNum = 3.9print(nnNum,Int(aaNum),mmNum + Int(bbNum))

输出结果为 20.0 10 13 取整时 是舍弃小数部分,不存在四舍五入这一说

类型别名(type aliases)

关键字为typealias,用来给现有类型起一个有意义的名字时,就需要他.

typealias AudioSample = Uintbint6

类似OC中的宏 就是替换 便于偷懒个人觉得 哈哈哈

布尔值

true false

元组

Turples 把多个值组合为一个复合值,其内部可以是任意类型,不要求类型相同.

解决了OC时函数只能返回一个值的问题,在OC时解决多个返回值的处理方法时,创建一个可变字典,然后返回字典,再解析即可.

 //元组练习let httpErrorMessage = (404,"Not Found")print("\(httpErrorMessage.0)",httpErrorMessage.1)let (statusCode,statusMessage) = httpErrorMessageprint("\(statusCode)","====",statusMessage)let (justStatusCode,_) = httpErrorMessageprint(justStatusCode)let http2016Status = (status:2016,message:"OK")print(http2016Status.status,http2016Status.message)//输出结果为404 Not Found404 ==== Not Found4042016 OK
  • 元组的元素可以为任意类型,彼此之间没有约束,元素个数不做限制
  • 可以通过下标获取元组里面的元素,下标从零开始
  • 如果只需要部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记
  • 可以给元组里面的单个元素命名,然后可以通过元素名访问元素

元组在临时组织值的时候非常有用,但是不适合创建复杂的数据结构.如果不是临时使用,请使用类或结构体而不是元组.

可选类型(optional)

其用来处理 值 可能缺失的情况,表示:
有值,等于x; 或者 没有值;

  • 在OC中,有返回值的函数,其返回值要么是一个对象,要么是nil,表示没有返回值.
  • 但对于结构体,OC一般会返回一个特殊值(比如NSNotFound)来表示值缺失
  • 在Swift出现了可选类型,其允许你 可以值缺失,但不需要返回一个特殊值表明.
let stringNum = "1245"let num = Int(stringNum)print(num)//输出结果为Optional(1245)
  • num被推测为类型”Int?” 或类型”optional Int”,从输出结果也可以看出来.

  • 一个可选的Int值被写作 Int?,问好表示包含的值为可选类型,即可能包含Int值,有可能不包含值,且只能是Int或什么都没有.

nil

其与OC中的nil不一样.OC中nil是一个指向不存在对象的指针.但是在Swift里面,nil不是指针,其用来表示一个确定的值,用来表示值缺失,任何类型的可选状态都被设置为nil,不只是对象类型.

  • 可以给可选变量赋值为nil,表示其没有值
  • 不能用于非可选变量的常量或变量.
  • 如果你声明一个可选的常量或变量,但是没有赋值,会自动被设置为nil
var rightAnswer:String // rightAnswer被自动设置为Nil

强制解析 !

使用 !来获取一个不存在的可选值会导致运行时错误,所以使用!强制解析值之前,一定要确定可选包含一个非nil得值.

if mmNum! = nil{}

可选绑定

在if条件语句中使用常量和变量来创建一个可选绑定,仅在if语句的句中才能获取到值.相反,在guard语句中使用常量和变量来创建一个可选绑定,仅在guard语句外且在语句后才能获取到值.

 //可选绑定let nnNumber = "1234String"if let mmNumber = Int(nnNumber){    print(mmNumber,nnNumber)}else{    print("\(nnNumber) can not be converted to an Integer")}

代码解释:

  • Int(mm)其返回的内容为可选类型.若mm为数字字符串则返回 可选类型的数字,否则返回nil.
  • 再来看上述代码 条件判断 若返回可选的数字 则,将该可选数字赋值给 nnNumber ,然后走print(mmNumber,nnNumber)
  • 若返回的为nil,则走else语句.上述代码最终走else语句.
  • 若nnNumber = “1234”,则最终走第一个语句,输出为 1234 1234

隐式解析可选类型

?变为!

错误处理

do catch

断言

断言允许附加一条调试信息

全局assert(::file:line:)函数 可以用来写一个断言.向这个函数传入一个结果为true或false的表达式以及一条信息当表达式的结果为false的时候这条信息会被显示.

let age = -3assert(age >= 0,"A person's age cannot be less than zero ")

因为age = -3 ,断言会触发

原创粉丝点击