Swift属性简介
属性是一种与类、结构体、枚举相关的值。它可以是存储属性或计算属性。存储属性存储常量或变量作为实例的一部分,而计算属性计算一个值,而不是存储值。属性可以用来定义类、结构体和枚举的特征。
Swift属性的分类
Swift属性可以分为计算属性、存储属性、类属性、实例属性以及属性观察器。
计算属性
计算属性是指那些没有实际存储值的属性,它们通过getter和setter方法来计算得出。计算属性通常用于操作其他属性的值或执行其他操作。
struct Circle {
var radius: Double
var area: Double {
return Double.pi * radius * radius
}
}
let circle = Circle(radius: 5.0)
print(circle.area) // 输出 78.53981633974483
存储属性
存储属性是指那些实际存储值的属性。存储属性可以是常量或变量,并且可以是任何Swift支持的数据类型。存储属性通常用于存储一个类、结构体或枚举的常量或变量。
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
}
var rectangle = Rectangle(width: 5.0, height: 10.0)
print(rectangle.area) // 输出 50.0
rectangle.width = 7.0
print(rectangle.area) // 输出 70.0
类属性
类属性是指那些与类相关的属性。类属性只有一份,不论创建了多少个类实例,类属性始终是相同的。类属性通常用于存储与类相关的常量或变量。
class MyClass {
static var count = 0
init() {
MyClass.count += 1
}
}
let object1 = MyClass()
let object2 = MyClass()
print(MyClass.count) // 输出 2
实例属性
实例属性是指那些与类实例相关的属性。每个类实例都拥有自己的实例属性。实例属性通常用于存储与类实例相关的常量或变量。
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person1 = Person(name: "Alice", age: 25)
let person2 = Person(name: "Bob", age: 30)
print(person1.name) // 输出 Alice
print(person2.age) // 输出 30
属性观察器
属性观察器是指在属性值将要被设置或已经被设置时被调用的方法。属性观察器可以用于为属性添加自定义逻辑。
class MyClass {
var myProperty: String = "" {
willSet {
print("myProperty will be set to \(newValue)")
}
didSet {
print("myProperty was set to \(myProperty)")
}
}
}
let object = MyClass()
object.myProperty = "Hello, World!" // 输出 "myProperty will be set to Hello, World!" 和 "myProperty was set to Hello, World!"
Swift属性的访问控制
Swift属性可以使用访问控制来限制哪些代码可以访问它们。访问控制可以应用于属性、方法、类、结构体和枚举。
公开访问
公开访问是指可以从任何代码中访问的属性。公开访问通常用于公共接口。
public class MyClass {
public var myProperty: String = ""
}
let object = MyClass()
object.myProperty = "Hello, World!"
内部访问
内部访问是指只能从同一模块中访问的属性。内部访问通常用于模块内部的实现细节。

internal class MyClass {
internal var myProperty: String = ""
}
let object = MyClass()
object.myProperty = "Hello, World!"
文件私有访问
文件私有访问是指只能从同一文件中访问的属性。文件私有访问通常用于实现细节。
fileprivate class MyClass {
fileprivate var myProperty: String = ""
}
let object = MyClass()
object.myProperty = "Hello, World!"
私有访问
私有访问是指只能从同一类或结构体中访问的属性。私有访问通常用于实现细节。
private class MyClass {
private var myProperty: String = ""
}
let object = MyClass()
object.myProperty = "Hello, World!"
Swift属性的懒加载
Swift属性可以使用懒加载来延迟它们的初始化。懒加载可以提高应用程序的性能,因为它们只有在第一次使用时才会被初始化。
class MyClass {
lazy var myProperty: String = {
print("myProperty is being initialized")
return "Hello, World!"
}()
}
let object = MyClass()
print(object.myProperty) // 输出 "myProperty is being initialized" 和 "Hello, World!"
Swift属性的属性包装器
Swift属性可以使用属性包装器来添加自定义的属性存储和访问行为。属性包装器可以用于限制属性值的范围、验证属性值或将属性值存储在其他位置。
@propertyWrapper
struct UpperCase {
private(set) var value: String = ""
var wrappedValue: String {
get { value }
set { value = newValue.uppercased() }
}
}
struct MyClass {
@UpperCase var myProperty: String = "Hello, World!"
}
let object = MyClass()
print(object.myProperty) // 输出 "HELLO, WORLD!"
结语
Swift属性是Swift编程中的重要组成部分。了解Swift属性的不同类型、访问控制和特性可以帮助您创建更好的Swift应用程序。
烽烟博客