Swift- 全局和局部变量

上述用于计算和观察属性的能力也可用于全局变量和局部变量。 全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。 局部变量是在函数,方法或闭包上下文中定义的变量。

在前面的章节中遇到的全局变量和局部变量都是存储的变量。 存储的变量(如存储的属性)为某种类型的值提供存储,并允许设置和检索该值。

但是,也可以在全局或局部范围中定义计算变量并定义存储变量的观察器。 计算变量计算它们的值,而不是存储它们,并且它们以与计算属性相同的方式写入。

类型属性的语法

在C和Objective-C中,您将与类型相关联的静态常量和变量定义为全局静态变量。 然而,在Swift中,类型属性被写为类型定义的一部分,在类型的外花括号中,每个type属性被显式地限定为它支持的类型。

使用static关键字定义类型属性。 对于类类型的计算类型属性,您可以使用类关键字来允许子类覆盖超类的实现。 下面的示例显示了存储和计算类型属性的语法:

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 6
    }
}
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}

查询和设置类型属性

print(SomeStructure.storedTypeProperty)
// Prints "Some value."
SomeStructure.storedTypeProperty = "Another value."
print(SomeStructure.storedTypeProperty)
// Prints "Another value."
print(SomeEnumeration.computedTypeProperty)
// Prints "6"
print(SomeClass.computedTypeProperty)
// Prints "27"
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
            }
        }
    }
}
var leftChannel = AudioChannel()
var rightChannel = AudioChannel()



leftChannel.currentLevel = 7
print(leftChannel.currentLevel)
// Prints "7"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "7"



rightChannel.currentLevel = 11
print(rightChannel.currentLevel)
// Prints "10"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "10"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容