1. 基本类型
1.0 常量、变量和申明
- Swift中用
let
关键字申明常量
let num = 1000
在编程中一个量被申明出来赋予初值后不再改变了,在这种情况下苹果建议我们把这些量申明成常量,这样对整个计算机资源的消耗比较小,整个程序更加的优化
- Swift中用
var
关键字申明变量
var index = 2
1.1 类型推断
从上面的列子中,我们定义常量和变量的时候,并没有指定它的类型,这样的写法在编译器中并没有报错,这似乎有些不合常理。因为在OC中声明一个变量时,必须要指定它的数据类型,eg:
const int count = 8;
NSString *str = @"Objective-C";
这个是因为在声明变量的时候,不需要指定数据类型的特性依托于Swift强大的类型推断功能。
在Swift中,声明常量和变量可以通过在初始化时判断传递给它的具体值得类型,并且把这个类型作为常量和变量的类型,eg:
let count = 8 // count 会被推断为Int类型
var str = "Swift" // str会被推断为String类型
当然,Swift也支持在声明时显式地指定常量或者变量的数值类型:
var name:String = "DeveloperLY"
1.2 注释
有编程经验的朋友对注释肯定不会陌生,Swift中也分为单行注释和多行注释。这里面Swift的多行注释不同于其它语言,Swift支持嵌套注释。
/*
这里是多行注释
/*
Swift的多行注释不同于其它语言,Swift支持嵌套注释
*/
*/
1.3 控制台输出常量和变量
如果要把常量和变量在控制台中打印,则用print函数。Swift2.0开始println()
和print()
已经整合成print()
。所以这个函数是默认换行的。
print(items: Any...)
是默认换行的,参数items
是可变参数。
print("Hello, Swift") // 会自动换行
print("Hello, Swift", terminator: "") // 设定结束符为空字符串,不进入下一行(不换行)
你也可以对items
中的参数指定分隔符和终止符,即使用另一个重载的print方法:
print("a", "b", "c", separator: "+", terminator: "end")
打印结果:
a+b+cend
- 注意:带有分隔符和终止符的print方法是不换行的。
Swift是采用字符串插值的方式在输出的内容中加入常量或者变量的值。eg:
let name = "DeveloperLY"
print("我的名字是\(name)")
打印结果:
我的名字是DeveloperLY
2. 基本数据类型
2.1 整数
Swift提供了Int
和UInt
两种整数类型,分别表示有符号和无符号的整数类型。另外Int
和UInt
后面可以带有数组8、16、32和64,以表示8、16、32和64位的整数。一般来说,我们并不需要指定整数的长度,使用UInt
的情况也很少,在开发中使用Int
类型即可。Int
和UInt
都是可以自适应平台的类型。
2.2 浮点型
Swift提供了两种浮点数类型:Float
和Double
。Float
表示32位浮点数,而Double
表示64位浮点数。选择哪种类型根据业务对精度的要求。
2.3 布尔类型
Swift提供了一个非真即假的逻辑类型---布尔类型(Bool)。布尔类型有两个布尔常量:true
和 false。
这里需要注意的是:Swift中的布尔类型不同于OC中的BOOL类型,不再接受0代表false
、0<代表true
的用法。
2.4 元组类型
Swift中给我们提供了一个非常好用的数据类型---元组。它可以把多个值成员复合成一个值吗,并且这些值成员的数据类型可以不同。eg:
let info = ("DeveloperLY", 18, "iOS开发者") // 一个包含三个成员值得元组
// 取出元组中的成员值(根据索引)
let name = info.0
let age = info.1
let job = info.2
// 我们也可以给每个成员值赋值
let info1 = (name: "DeveloperLY", age:18, job: "iOS开发者")
// 调用的时候也可以使用名称调用
let showName = info1.name
let showAge = info1.age
let showJob = info1.job
// 另外如果想忽略元组中不重要的信息时,可以把元组传递到一个新的元组中,把需要忽略的值用“_”表示忽略
let (showName, _, _) = info1
print("name is \(showName)") // "打印结果:name is DeveloperLY"
2.5 可选型
可选型Optionals
是Swift的新特性,它允许你存储两种状态的值给Optional
,变量:有效值或者nil
,可选型用于某些不确定是否有值的情况,定义可选型只需在常规类型后面加一个“?”即可表示这个值是Optional
。
Swift要求所有的Optional属性都必须有明确的值,如果为空,则必须明确设定为nil
。
Optional
var someOptionalString: Optional = "Optional"
var someOptionalString2: String? = "Optional" // 这句等价于上面一句,这句是推荐写法,因为它更简洁,问号(?)是Swift提供的语法糖
// 可选型不能直接使用,使用需要解包
if someOptionalString != nil {
// 变量不为空
if someOptionalString!.hasPrefix("Opt") {
print("has the perfix")
}
let empty = someOptionalString?.isEmpty
}
someOptionalString = nil
/*
使用(!)可以解决无法访问Optional值得运行错误。若要使用(!)强制解析,一定要确保Optional里不是nil参数
*/
// 显示解包Optional 变量
var unwrappedString: String! = "Value is expected."
var unwrappedString2: ImplicitlyUnwrappedOptional = "Value is expected." // 和上面完全等价,(!)也是语法糖,推荐写法
if let someOptionalStringConstant = someOptionalString {
// 由于变量someOptionalString 有值,不为空,所以 if 条件为真
if !someOptionalStringConstant.hasSuffix("ok") {
// does not have the prefix
}
}
someOptionalString2 = nil
func fooGuard() {
// 还有一种是先处理为空的
guard someOptionalString2 != nil else {
print("value is nil")
return
}
}
3. 基本运算符
3.1 赋值运算符
之前在定义常量和变量的时候已经接触过赋值运算符的用法了,Swfit使用等号“=”来表示赋值运算。与其他语言一样,a = b,表示将b的值赋值给了a。如果是赋值的对象是一个元组,那么元组内成员的值在赋值操作中是一一对应的。eg: let (x, y) = (1, 2),则1赋值给x,2赋值给y。
需要注意的是:Swift的赋值语句是没有返回值的。
if x = y {} // 系统会直接报错,避免了开发人员范设计性的错误。
3.2 数值运算
Swift和OC一样,支持基本的加减乘除和求余运算。但是Swift中的数值运算比OC更加的强大。比如Swift中的“+”可以直接拼接字符串。Swift中的求余运算“%”可以对浮点数求余。
3 + 1
5 - 2
2 * 4
4 / 2
"iOS" + "开发者"
5 % 3
5.3 % 3
6 % 2.5
3.3 自增和自减运算
Swift 3.0之后已经去掉了 “++”、“--” C语言风格的操作符进行自增和自减的操作了,新的写法:
var a = 1
a += 1 // 自增
a -= 1 // 自减
相比于“++”、“--”,上面的写法可以知道自增和自减的“步长”。
3.4 复合赋值
Swift提供把运算符和赋值复合起来使用的复合操作,与自增和自减操作类似,a += 2 的操作等同于 a = a + 2;
3.5 比较运算
所有C中的比较运算符在Swift中都可以使用。另外,在Swift中,“==”可以用在任何类型的比较中,而不像OC中那样使用不同的isEqual
方法。比较运算会返回Bool类型的比较结果。
3.6 三元运算符
与OC中的三元运算符用法一致,格式为:判断条件 ? 为真时操作 :为假时操作。
3.7 逻辑运算符
Swift中的逻辑运算符的操作对象是布尔值。沿用了C语言中的三种逻辑运算:与、或、非。
3.8 范围
在OC中,可以使用Range函数来指示一个起始位置和长度,从而框定一个范围。
Swift中的范围使用起来方便了许多,有两种形式:
- 1...9 表示闭区间[1, 9],也就是从1到9的范围。
- 1..<9 表示半闭区间[1, 9),也就是从1到8的范围。
4. 字符串与字符
在Swift中,字符串的类型是String
,不论定义的是常量字符串还是变量字符串。
let Str = "不可变字符串"
var mutableStr = "可变字符串"
// 连接字符串
let firstStr = "Swift 是未来iOS的主流开发语言,"
let secondStr = "你认为呢?"
let swiftStr = firstStr + secondStr
// 判断字符串相等
let str1 = "DeveloperLY"
let str2 = "DeveloperLY"
if str1 == str2 {
print("相同") // 会执行
}
处理字符串的难点是字符串的索引和字符串的创建,以及如何创建一个字符串的子串。
Swift的字符串是由另外一个类型来索引的,这个类型就是String.Index。
(未完待续...)