1.類基本格式
class 類名{
成員變量
成員方法
}
2.使用時的注意事項:
(1)類中的成員變量必須初始化(可以直接在定義變量的時候賦值、自定義構造方法賦值)
(2)類中的實例方法可以直接修改類內的成員變量
(3)類提供的構造方法是沒有參數的
(4)static修飾的成員變量叫做類型變量,只能通過類名調用
(5)類是引用類型,而結構體是值類型
(6)類可以被繼承,而結構體不能被繼承
(7)swift中沒有父/根類(和OC NSObject不同)
(8)"=== / !=="表示兩個對象的相等/不相等, 使用==會報錯
var person1 = Person(firstname: "dahuang", lastname: "li")
var person2 = person1
print(person1 === person2) // true
class Person {
var name: String = ""
var age: Int = 0
//static修飾的成員變量叫做類型變量
//類型變量只能通過類名調用
staticvar height: Double = 0.0
func eat() {
age = 20
print("\(name)正在吃吃吃")
}
func sleep() {
print("睡")
}
staticfunc hitDouDou() {
print("\(Person.height)打豆豆")
}
}
//定義對象
var xiaoPerson = Person()
xiaoPerson.name = "小明"
xiaoPerson.age = 10
Person.height = 1.50
xiaoPerson.eat()
xiaoPerson.sleep()
Person.hitDouDou()
//定義myPoint類成員變量是x,y 實現自定義構造方法對成員變量賦值
class myPoint {
var x: Int
var y: Int
//實現自定義的構造方法
init(x: Int,y: Int) {
self.x = x
self.y = y
}
}
//類是引用類型,而結構體是值類型
var p = myPoint(x: 10, y: 20)
var p1 = p
print(p1.x,p1.y)
p1.x = 10000
print(p.x)
struct Size {
var width: Int
var height: Int
}
var s = Size(width: 230, height: 998)
var s1 = s
s1.width = 1
print(s.width,s1.width)
?```
#3.延遲屬性
1.當一個成員變量初始化時耗時較長或者這個變量在此時不使用,那么這個變量就可以延遲初始化
2.用lazy修飾后就不會初始化,只有調用時才會初始化?
import Foundation
//當一個成員變量初始化的時候耗時很長或者這個變量在此時不使用那么這個變量就可以延遲初始化
//什么時候使用什么時候初始化(只有單獨調用的使用才初始化)
var count = 0
class Read {
var bookName = ""
init() {
bookName = "喬布斯傳"
//模擬線程
NSThread.sleepForTimeInterval(5)
print("\(count)頁\(bookName)書已讀完")
}
}
class Reader {
var name: String = ""
var age: Int = 0
//創建閱讀類對象
lazyvar reading: Read = Read.init()
//開始閱讀
func startReading() {
print("姓名為\(name)年齡為\(age)的孩子正在閱讀")
count = 1000
}
}
var xiaoYellow = Reader()
xiaoYellow.name = "xiaoYellow"
xiaoYellow.age = 10
xiaoYellow.startReading()
let result = xiaoYellow.reading
?