下面展示一些 內聯代碼片
。
//類的定義 面向對象的基礎是類 類產生了對象
class Person : NSObject { //用到kvc 需要繼承object
@objc //使用@objc修飾將暴露給Objective-C的類、方法、屬性等
var age : Int = 0;
//重寫 override 如果寫的某一個方法是對父類的方法重寫,必須加override
override func setValue(_ value: Any?, forUndefinedKey key: String) {
} //設置沒有的屬性
}
let p = Person()
p.age = 20;
p.setValuesForKeys(["age":"11", "name":"ace"])
p.setValue(12, forKey: "age")
print(p.age) //12
class Student : Person{
var name = ""
}
let s = Student()
s.age = 10
s.name = "2"
class People : NSObject{
//1.存儲屬性
var age:Int = 0
var name:String? //name 是空 可選類型
var mathScore:Double = 0.00
var chineseScore = 0.00
//2.定義計算屬性 通過其他方式計算結果
var totalScore:Double {
return mathScore + chineseScore
}
/*//定義方法 返回總分 不推薦
func sumScore() -> Double { //使用當前對象的某個屬性或方法 直接使用
return mathScore + chineseScore
}*/
//3.類屬性 和整個類相關的屬性,並且是通過類名進行訪問
static var couresCount:Int = 0
}
let peo = People()
peo.age = 10
peo.name = "a"
peo.mathScore = 58.9
peo.chineseScore = 89
print(peo.age) //有初始值 和之前的可選類型作對比
if let name = peo.name {
print(name)
}
let averageScore = (peo.mathScore + peo.chineseScore) * 0.5 //平均分 乘法效率高於除法
print(peo.totalScore)
People.couresCount = 3
//
//類的構造函數 系統默認的構造函數 類後面的 ()
class Person:NSObject {
@objc var name = "" //oc的kvc 別忘記@objc
@objc var age = 0
override init() { //繼承Object 父類有init 重寫需要加上override
//構造函數 沒有super.init() 系統默認調用 寫不寫都可以
//super.init()
print("--")
}
//自定義構造函數
init(name:String, age:Int) {
self.name = name
self.age = age
}
init(dict: [String : Any]) {
//此時tempName是可選類型AnyObject? 轉成String?
//as?最終轉成的類型是一個可選類型
let tempName = dict["name"]
let tempAge = dict["age"]
name = tempName as! String //如果上面的name是可選類型 var name : string 那麼 name = tempName as? String 此處的name已經是String 所以把Any轉成String
age = tempAge as! Int //同理 any轉成int
print(name, age)
//假設下面age沒有賦值 上面的強制解包就會有問題
if let age1 = dict["age"] as? Int { //先判斷是否有值
age = age1
}
//as? 轉成可選類型
//as! 轉成確定類型
}
//上面的方法爲了大家理解 麻煩 用kvc
init(dictory: [String : Any]) {
super.init()
setValuesForKeys(dictory)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
//類的屬性監聽
var score :String = "" {
//即將改變
willSet {
print(score)
print(newValue) //臨時變量
}
//已經改變 通常只要這個就可以了
didSet {
print(score)
print(oldValue) //臨時變量
}
}
}
let p = Person()
let p1 = Person(name: "sa", age: 1)
print(p1.name,p1.age)
let p2 = Person(dict: ["name":"bbb", "age":12, "height":1.87])
print(p2.name, p2.age)
let pp = Person(dictory: ["name":"ss", "age":23, "height":1.23])
print(pp.age)
pp.score = "aa"
pp.score = "bb"