Swift3 - 01:基础语法

入门学习Swift3的一些基本语法tips。

  • getter、setter、计算属性、只读属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import UIKit

class Person: NSObject {
// 使用一个属性记录 name 的值
var _name: String
// Swift中通常不会重写 getter 和 setter 方法
var name: String {
get {
return _name
}
set {
_name = newValue
}
}

// 只定义了 getter,所以 title 为只读属性,同时 title 又是计算型属性,
// 每次调用 person.title 时,都进行一次计算,随 name 值变化
//
var title: String {
get {
return "Mr. " + (name ?? "")
}
}
// 可以简写为如下格式
var title2: String {
return "Mr. " + (name ?? "")
}

// 闭包,只计算一次,之后不随 name 值变化
var title3: String = {
return "Mr. " + (name ?? "")
}()
}
  • willSet和didSet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import UIKit

class Person: NSObject {

var nickName: String
var age: Int = 0 {
//age属性变化前做点什么
willSet
{
println("Will set an new value \(newValue) to age")
}
//age属性发生变化后,更新一下nickName这个属性
didSet
{
println("age filed changed form \(oldValue) to \(age)")
if age < 10
{
nickName = "Little"
}else
{
nickName = "Big"
}
}
}
}
  • 访问控制修饰词

Swift 3 相较于之前的版本,新加了两个关于访问控制修饰符,openfileprivate。全部访问控制修饰词的限制如下:

1
open > public > internal(默认) > fileprivate > private

openpublic

二者都是可以跨 Module 访问的,但openpublic 更加开放。

open 修饰的类可以继承,open类中,用 open 修饰的方法可以重写,而 public 不可以。

public final 在任何地方均不可重写, public可在本 Module 内重写。

internal

internal 是默认的访问控制级别。internal 对自身 Module 开放所有源文件,而对外界源代码屏蔽。

fileprivate & private

fileprivate 是文件内可访问,private 是代码块内可访问,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Animal: NSObject {
func eat() {
chew() // 在同一文件,fileprivate可访问
bite() // 不在同一代码块,private禁止访问
}
}

extension Animal {
fileprivate func chew() {
bite() // 在同一代码块,private可访问
}

private func bite() {
// do something
}
}
分享到