Struct:Swift中基礎的數據類型都是結構體而不是類
//比如我們定義模型經常用Struct
struct StudentModel {
var name: String
var age: Int
//這里為了更加靈活被使用,會經常添加構造方法,不寫也可以結構體有這個默認的構造方法
// init(name: String,age: Int) {
// self.name = name
// self.age = age
// }
//在擴充的構造函數中必須保證所有的成員變量是有值的 下面的構造方式:又沒有對存儲屬性初始化
//Return from initializer without initializing all stored properties
// init(name: String) {
// self.name = name
// }
// init(age: Int) {
// self.age = age
// }
//如果你要使用變異方法修改屬性,需要添加關鍵字 : mutating
mutating func showName(name: String) {
self.name = name
}
}
//MARK: 這里遵循CustomStringConvertible 方便輸出打印
extension StudentModel: CustomStringConvertible {
var description: String {
return "name = \(self.name) age = \(self.age)"
}
}
var s = StudentModel(name: "Jo", age: 10)
s.showName(name: "xiaoma")
print(s)
枚舉:也可以有方法和屬性,但是它的屬性只能是計算型屬性,并且沒有繼承特性 關鍵字 enum
enum DataType{
case IntType
case StringType
}
//訪問case 用點語法
DataType.IntType
//什么時候用枚舉:當某樣東西在某種情況下是一個值,在另一種情況下是另一種值,但是不可能同時擁有這兩個值
//我們的可選項就是一個枚舉,同時也是一個泛型
enum Optional<T> {
case None
case Some(T)
}
//其實可選項有點封裝
let str: String? = nil
//等價于
let str1 = Optional<String>.None
//如果非空
let str2: String? = "hello world"
//等價于
let str3 = Optional<String>.Some("hello world")
//實際開發中的枚舉,還可以嵌套包裝
enum NetworkingStatusType{
case noNet
case wifi
case fengwo
var netType: String {
switch self {
case .noNet:
return "沒網"
case .wifi:
return "wifi"
case .fengwo:
return "蜂窩"
}
}
}
let type = NetworkingStatusType.noNet
print(type.netType)
Swift HelloWorld(一)
Swift 基本數據類型(二)
Swift 字符串(三)
Swift 閉包(Closures)(四)
Swift 集合類型(五)
Swift 函數(六)
Swift 類(七)
Swift 結構體、枚舉(八)
Swift 屬性(九)
Swift 方法(十)