《Swift学习笔记》13 - 属性的简单介绍

2020-02-14  本文已影响0人  ShIwEn9

介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
参考内容:
Swift中文
YungFan老师

swift

一、属性相关使用

1. 存储属性
// 存储属性
class className {
    let name = "Swift"
    var sex = "男"
    var age = 23
} 

当中的 name sex age都是存储属性 ,一般情况下用 var 关键字定义计算属性——包括只读计算属性——为变量属性,因为它们的值不是固定的

2. 读取和设置存储属性

通过点语法实现

// 实例化对象
let swiftName = className()
//swiftName.name = "123" 
swiftName.sex = "女"
print(swiftName.sex) // 女

// 结构体
struct structName{
    var name = "swift"
    var sex = "男"
}
// 用 let 修饰
let otherSwiftName = structName(name: "Swift", sex: "21")
//otherSwiftName.name = "123" // 会报错!
3. 延迟存储属性 懒加载属性
class className2 {
    let name = "Swift"
    lazy var sex = "男"
    var age = 23
}

print(className2())

注意: lazy修饰的属性 同时被多个线程访问并且属性还没有被初始化,则无法保证属性只初始化一次。

4. 计算属性

计算属性实际并不存储值。相反,他们提供一个读取器和一个可选的设置器来间接得到和设置其他的属性和值。

// 计算属性
class student {
    var name: String = ""
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    // 计算属性
    var averageScore : Double {
        get {
           return (chineseScore + mathScore) / 2.0
        }
//        set(newAverageScore) {
//            //self.averageScore = newAverageScore
//            self.averageScore = newValue
//        }
        //简写 set 
        set {
            //self.averageScore = newAverageScore
            self.averageScore = newValue
        }
    }
    
}

student().averageScore

let studentClass = student()

studentClass.chineseScore = 10.0
studentClass.mathScore = 12.0
print(studentClass.averageScore)


// 只读计算属性
class student2 {
    var name: String = ""
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    // 计算属性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2.0
        }
    }
}

let student2Class = student2()
//student2Class.averageScore = 2;
5. 属性观察者
6. 类型属性
class SomeClass {
    static var storedTypeProperty = "Some value."
    // 只写了get方法
    static var computedTypeProperty: Int {
        return 27
    }
    // 只写了get方法
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}
SomeClass.storedTypeProperty = "123"
SomeClass.computedTypeProperty
SomeClass.overrideableComputedTypeProperty
struct AudioChannel {
    static let thresholdLevel = 10
    static var maxInputLevelForAllChannels = 0
    var currentLevel: Int = 0 {
        didSet {
            if currentLevel > AudioChannel.thresholdLevel {
                // cap the new audio level to the threshold level
                currentLevel = AudioChannel.thresholdLevel
            }
            if currentLevel > AudioChannel.maxInputLevelForAllChannels {
                // store this as the new overall maximum input level
                AudioChannel.maxInputLevelForAllChannels = currentLevel
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读