【Swift】学习笔记(1)——初识 基础数据类型,代码风格,元组,断言
自从苹果发布swift之后,我就一直想学习一下,一直未能正式的投入到它的学习中,从今天开始我将用博客来驱动我的swift学习,也为大家更快了解它。
1、定义变量和常量
var 定义变量,let定义常量。
例如:
var test = 1 test = 2 //变量可以改变值 let test = 1 test = 2 //常量不能改变值,编译器会报错 var test1=1,test2=2,test3=3 //逗号分隔多个变量
2、增加类型标注
在 var test = 1 这个例子中,test被swift推断为int类型。swift是类型安全的。
var test: Int = 1 这个定义和上面是一样的,只是给test这个变量增加了一个类型标注,告诉swfit不用推断了。
3、基础数据类型
Int表示整型值;Double和Float表示浮点型值;Bool是布尔型值;String是文本型数据;Character是字符类型。Swift 还提供了两个基本的集合类型,Array和Dictionary
4、全局输出函数 println和print
这个大家都知道,换行和不换行的区别,输出到控制台。
例如:println("this is my first swift test")
现在要把上面定义的test进行输出怎么办?
println("test value = \(test)")
Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符,就是\()
5、注释 //当行注释 /* */片段注释
6、分号 可要可不要,随意,但是如果一行写多条独立的语句就必须要分号了
例如:let test = "test";println(test)
7、整数 整数分为有符号(正,负,0)和无符号(正,0)
Swift 提供了8,16,32和64位的有符号和无符号整数类型。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是UInt8,32位有符号整数类型是Int32。就像 Swift 的其他类型一样,整数类型采用大写命名法。
let minValue = UInt8.min // minValue 为 0,是 UInt8 类型的最小值 let maxValue = UInt8.max // maxValue 为 255,是 UInt8 类型的最大值
Int 和 UInt
一般来说,你不需要专门指定整数的长度。Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:
在32位平台上,Int和Int32长度相同。
在64位平台上,Int和Int64长度相同。
Swift 也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同:
在32位平台上,UInt和UInt32长度相同。
在64位平台上,UInt和UInt64长度相同
8、浮点数
Double 和 Float
浮点数是有小数部分的数字
浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
Float表示32位浮点数。精度要求不高的话可以使用此类型。
Double精确度很高,至少有15位数字,而Float最少只有6位数字。选择哪个类型取决于你的代码需要处理的值的范围。
9、数值型字面量
整数字面量可以被写作:
一个十进制数,没有前缀
一个二进制数,前缀是0b
一个八进制数,前缀是0o
一个十六进制数,前缀是0x
浮点字面量可以是十进制(没有前缀)或者是十六进制(前缀是0x)。小数点两边必须有至少一个十进制数字(或者是十六进制的数字)。浮点字面量还有一个可选的指数(exponent),在十进制浮点数中通过大写或者小写的e来指定,在十六进制浮点数中通过大写或者小写的p来指定。
如果一个十进制数的指数为exp,那这个数相当于基数和10^exp的乘积:
1.25e2 表示 1.25 × 10^2,等于 125.0。
1.25e-2 表示 1.25 × 10^-2,等于 0.0125。
如果一个十六进制数的指数为exp,那这个数相当于基数和2^exp的乘积:
0xFp2 表示 15 × 2^2,等于 60.0。
0xFp-2 表示 15 × 2^-2,等于 3.75。
下面的这些浮点字面量都等于十进制的12.1875:
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
看起来就头疼,哪那么麻烦都用十进制不就好了。。。 吐吐槽 还是有点用的。。。
10、字符类型的类型转换
var one: Int = 10 var two = 3.11 var three = Double(one) + two //Double有整型构造器,其它整数类型一样处理,这里是示例
11、布尔值 true false
12、类型别名 typealias
给整型改个名字,意义不大。阅读性变差。。例如
typealias MyInt = Int var test: MyInt = 123
13、元组 这个挺重要的
元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。
例如创建一个(Int,String)类型的元组 : (500,"server error")
let Mytuples = (500,"server error") //定义一个元组 let (code,message) = Mytuples //将元组数据分解输出 let (code,_) = Mytuples //只需要第一个值 ,不需要的用_表示吧 println("code is \(code)") //输出500 println("code is \(Mytuples.0)") //通过下标访问 输出500 let Mytuples2 = (code:500,message:"server error") //定义一个带参数名称的元组 println("code is \(Mytuples2.code)");//通过元组元素名称访问 输出500
14、可选类型
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示:
有值,等于 x
或者
没有值 nil
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
因为toInt方法可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)
if convertedNumber {
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"
你可以在可选的名字后面加一个感叹号(!
)来获取值上面的多麻烦啊 还得判断变量有没有值:用if判断,再用!进行强制解析。
可以用可选绑定来简化代码:
if let actualNumber = possibleNumber.toInt() {
println("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"
也可以用隐式解析可选类型来处理(确定变量总是会有值才行,否则会出错的)
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // 不需要感叹号
// 输出 "An implicitly unwrapped optional string."
15、断言 判断逻辑 true继续执行 false 结束应用
例如:let a = 1;assert(a >= 0) 就会触发