Swift 結構體、枚舉(八)

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 方法(十)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容