/*
類的基本定義
Swift中的結構體和類非常相似, 但是又有不同之處
類是具有相同屬性和方法的抽象
格式:
class 類名稱 {
類的屬性和方法
}
*/
class Rect {
var width:Double = 0.0
var height:Double = 0.0
func show() -> Void{
print("width = \(width) height = \(height)")
}
}
// 類沒有逐一構造器
//var r1 = Rect(width: 10.0, height: 10.0)
var r1 = Rect()
r1.show()
var r2 = r1
r2.show()
// 類是引用類型, 結構體之間的賦值其實是將r2指向了r1的存儲控件, 所以他們是兩個只想同一塊存儲空間, 修改其中一個會影響到另外一個
r1.width = 99
r1.show()
r2.show()
/*
恆等運算符, 用於判斷是否是同一個實例, 也就是是否指向同一塊存儲空間
=== !==
*/
var r3 = Rect()
if r1 === r3
{
print("指向同一塊存儲空間")
}
第二、類的定義
import UIKit
class Student : NSObject {
// 1.屬性
// 1> 存儲屬性
// 注意一:在開發中,如果是對象或者結構體,在沒有賦值的情況下通常定義爲可選類型
var name : String?
// 注意二:在開發中,如果是基本屬性類型,比如int類型,在沒有賦值的情況下,通常直接給一個默認的值0
var age : Int = 0
var chineseScore : Double = 0.0
var mathScore : Double = 0.0
// 2> 計算屬性
/*
var average : Double {
get {
return (chineseScore + mathScore) * 0.5
}
// 較少寫set方法(默認情況下,set方法中有一個系統變量:newValue.新傳入的值就再newValue中)
set {
self.average = newValue
}
}
*/
// 如果計算屬性是一個只讀屬性,則可以省略get{}
var average : Double {
return (chineseScore + mathScore) * 0.5
}
// 3> (瞭解)類屬性
// 注意:
// * 類屬性用static修飾
// * 類屬性只能通過類來訪問
static var courseCount = 0
}
// 創建類的對象
let stu : Student = Student()
stu.name = "yz"
stu.age = 11
stu.chineseScore = 61.5
stu.mathScore = 97.8
if let tempName = stu.name {
print("name is \(stu.name!), age is \(stu.age), 語文成績:\(stu.chineseScore), 數學成績:\(stu.mathScore)")
}
// 獲取yz老師的平均成績
print(stu.average)
Student.courseCount = 2
print(Student.courseCount)
class Person : NSObject {
var name : String?
var age : Int = 0
var height : Double = 0.0
}
let p = Person()
// 注意:賦值不是調用set方法,直接拿到屬性給屬性賦值
p.name = "why"
p.age = 18
p.height = 1.88
第三、類型轉換
/*
Swift不允許隱式類型轉換, 但可以使用顯示類型轉換(強制類型轉換)
OC:
int intValue = 10;
double doubleValue = (double)intValue;
Swift:
*/
var intValue:Int = 10
var doubleValue:Double
doubleValue = Double(intValue)
// 注意:Double()並不會修改intValue的值, 而是通過intValue的值生成一個臨時的值賦值給doubleValue
print(intValue)
print(doubleValue)