在 SwiftUI 的开发中,.example 是一种静态属性调用的简写形式,用于访问类型中定义的静态属性(static property)。
静态属性是什么?
静态属性(static property)是与类型本身相关联的属性,而不是某个具体实例的属性。
实例属性属于某个对象(实例),需要通过实例访问。
静态属性属于类型,可以直接通过类型访问,无需创建实例。
静态属性定义
struct Location: Codable, Equatable, Identifiable {
let id: UUID
var name: String
var description: String
var latitude: Double
var longitude: Double
var coordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}
static let example = Location(
id: UUID(),
name: "Buckingham Palace",
description: "Lit by over 40,000 lightbulbs.",
latitude: 51.501,
longitude: -0.141
)
}
static let example 是 Location 类型的一个静态属性。
由于 example 是静态的,可以直接通过类型名 Location.example 访问它。
// 使用静态属性 example 作为预览数据
LocationView(location: Location.example)
使用 .example 的简写形式
在 Swift 中,如果上下文中已经明确知道类型是 Location,就可以省略类型名,直接写 .example。
具体场景
在预览代码中:
#Preview {
EditView(location: .example,
name: Location.example.name,
description: Location.example.description
)
}
.example 相当于 Location.example,因为 EditView(location:) 参数已经表明 location 是 Location 类型。
这是 Swift 的语法糖,旨在提高代码可读性。
静态属性的用途
提供示例数据: 像你的代码中,example 静态属性为开发、调试或预览提供了一组固定的示例数据。
存储常量: 如果一个值对所有实例都通用,可以用静态属性存储。
提供全局配置或工具方法: 例如单例模式的实现通常使用静态属性。
可维护性:把示例数据集中定义在一个地方(static let example),而不是在代码中硬编码,能提高代码的清晰度和可维护性。
便于共享:.example 可以被所有需要该类型测试数据的地方共享,避免重复创建实例。
注意点
类型必须支持静态属性:
.example 是访问静态属性的方式,因此,类型需要先定义一个静态属性(static)。
适用于需要测试的简单示例:
示例数据通常用于开发或调试环境,在生产代码中,应避免依赖这些静态示例,尤其当示例数据可能与真实数据逻辑不一致时。
总结
.example 是对静态属性 example 的简写形式,前提是编译器能明确推断出使用的是 Location 类型的属性。
完整调用形式:
Location.example
简写形式(上下文明确时):
.example