本文为学习Swift开发时的笔记,参考资料为《Swift 4从零到精通iOS开发》。该书的模拟面试专栏在另一篇文章中整理归纳

省略分号

Swift语言是一种十分快速简洁的语言,其允许开发者省略分号,自动以换行来分隔语句,同时也支持在一行中编写多句代码,此时需要使用分号对语句分隔,

量值的声明

  1. 变量的声明使用var,常量的声明使用let,其他用法基本相同。
  2. Xcode编译器支持对Swift语言的类型自动推断,当声明变量时如果直接给变量赋初值,则编译器会根据赋值的类型来确定变量的类型,之后变量的类型将不可更改。
  3. 手动声明数据类型
    swift
    var str:String;//声明String类型变量str
    var a2:Int=1,b2:Float=2.9,c2:String="string"//同一行语句声明多个变量
    var a,b,c:Int//同一行同时声明3个int型

对Swift语言的类型推断是Xcode编译器一个十分优秀的特性,在实际开发中,开发者应该尽量使用这种特性。
如果需要修改变量的值,直接对变量再赋值即可。需要注意的是,所赋值的类型必须和变量的类型保持一致。

Swift的命名规则十分广泛,可以包括Unicode字符、数字甚至中文和表情符号,但不可使用预留关键字来作为常量或者变量的名称,不可以数字开头,空格、数学符号、制表符、箭头等符号也不可用在命名中。当然,仍建议用驼峰方式规范命名,即首字母一般为小写,之后每个单词的首字母大写,其他字母均小写。

特殊的数据类型

元组

一种允许一些并不相关的类型进行自由组合成为新的集合类型。使用方法如下

var pen:(name:String,price:Int)
pen  = ("钢笔",2);
var name = pen.name;
var price = pen.1;
var (theName,thePrice) = pen;//此时 theName变量被赋值为"钢笔" thePrice变量被赋值为2
var (partName,_)=pen;//此时 partName变量被赋值为"钢笔",_被称为匿名标识符

可选值类型(Optional类型)

Swift语言是一种十分强调类型安全的语言,开发者在使用到某个变量时,编译器会尽最大可能保证此变量的类型和值的明确性,保证减少编程中的不可控因素。然而在实际编程中,无论任何类型的变量都会遇到值为空的情况,在Objective-C语言中并没有机制来专门监控和管理为空值的变量,程序的运行安全性全部靠开发者手动控制。Swift语言中提供了一种包装的方式来对普通类型进行Optional包装,实现对空值情况的监控。在Swift语言中,如果使用了一个没有进行赋值的变量,程序是会直接报错停止运行的。如下代码会被Xcode抛出错误提示,因为Swift语言中普通的类型不允许为nil,从而极大地减小了代码的不可控性

var obj:String
if obj == nil {}

如果一个变量在逻辑上可能为nil,则开发者需要将其包装为Optional类型,改写上面的代码如下:

var obj:String?
if obj == nil {}

在声明obj变量的时候,这里将其声明成了String?类型,在普通类型后面添加符号“?”,即可以将普通类型包装为Optional类型。
Optional类型不会独立存在,总是会附着于某个具体的数据类型之上,具体的数据类型可以是基本数据类型,可以是结构体,也可以是类等。Optional类型只有两种值,可以将其理解为:

  • 如果其附着类型对应的量值有具体的值,则其为具体值的包装。
  • 如果其附着类型对应的量值没有具体的值,则其为nil。

Optional类型的if-let操作举例:

var prodcut:Int? = 52
if let weight = prodcut, weight > 30 {
    print("产品合格")
}else{
    print("不合格")
}

别名

Swift中使用typealias实现C、C++、Objective-C中typedef相同的效果,如:

typealias Price = Int;
var penPrice:Price = 100;

空字符串

字符串变量的值为空字符串与字符串变量的值为nil是两个完全不同的概念,如果一个Optional类型变量没有赋值,则其为nil,如果赋值为空字符串,则其并不是nil。判断一个字符串变量的值是否为空字符串有特定的方法。

使用String结构体的构造方法来构造String类型的量值

在Swift语言中,String类型实际上是一个结构体,其实前面章节中学习的整型、浮点型和布尔型也是由结构体实现的。Swift语言中的结构体十分强大,其可以像类一样进行属性和方法的定义。整型、浮点型也可以使用构造的方法来实现互相转换。例:

//直接赋值
var str:String = "Hello, playground"
//直接赋值为空字符串
str = ""
//通过构造方法来进行str变量的构造
str = String() //构造空字符串""
str = String("hello") //通过字符串构造"hello"
str = String(666) //通过整型数据构造"666"
str = String(6.66) //通过浮点型构造"6.66"
str = String("a") //通过字符构造“a”
str = String(false) //通过Bool值构造"false"
str = String(describing: (1,1.0,true)) //通过元组构造“(1,1.0,true)”
str = String(format:"我是%@","突击核") //通过格式化字符串构造"我是突击核"
str = String(describing: Int.self) //通过类型来构造字符串“Int”
var a = Int(1.05) //将1.05换成1
var b = Float(a) //通过整型数据a构造浮点型数据b

作者 Assaultcore

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注