Swift 3.0语法(初级)

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提供了IntUInt两种整数类型,分别表示有符号和无符号的整数类型。另外IntUInt后面可以带有数组8、16、32和64,以表示8、16、32和64位的整数。一般来说,我们并不需要指定整数的长度,使用UInt的情况也很少,在开发中使用Int类型即可。IntUInt都是可以自适应平台的类型。

2.2 浮点型

Swift提供了两种浮点数类型:FloatDoubleFloat表示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。
(未完待续...)

你可能感兴趣的:(Swift 3.0语法(初级))