Swift
Swift 中的属性修饰符用于定义属性的访问权限以及其他特性,比如是否可以被外部访问,是否是一个计算属性等。
Swift 中常用的属性修饰符包括:
5种修饰符访问权限排序
open > public > internal > fileprivate > private
private:只在定义它们的作用域内(如类、结构体、枚举或函数内)可以访问。
fileprivate:在定义它们的文件内可以访问,但不能在不同文件中访问。
internal:在同一个应用程序的不同部分可以访问,但不能在应用程序之外访问。
public:在任何地方都可以访问。
open:在任何地方都可以访问,但是可以被重写或者扩展。
static:关键字,用来修饰类的属性,表示静态属性,不需要实例化对象就可以访问。
class:关键字,用来修饰类的属性,表示该属性在类的所有实例中都只有一份拷贝。
final:关键字,用来修饰类的属性,表示该属性不能被重写。
lazy:关键字,用来修饰属性,表示该属性的初始化将被推迟,直到第一次使用。
-
weak:弱引用对象的引用计数不会+1, 必须为可选类型变量。
在声明弱引用对象是必须用var关键字, 不能用let,因为弱引用变量在没有被强引用的条件下会变为nil, 而let常量在运行的时候不能被改变. -
unowned:相当于__unsafe_unretained, 不安全. 必须为非可选类型。
unowned引用是non-zeroing(非零的), 在ARC销毁内存后,不会被赋为nil, 这表示着当一个对象被销毁时, 它指引的对象不会清零. 也就是说使用unowned引用在某些情况下可能导致dangling pointers(野指针). 所以在访问无主引用的时候,要确保其引用正确,不然会引起内存崩溃。
SwiftUI
-
@State & @Binding
-
ObservableObject(@Published property) -> @StateObject(create object) -> @ObservedObject(bind object)
-
@StateObject(create object) -> ContentView.environmentObject(object) -> @EnvironmentObject var object:
-
Important Environment
//自定义变量放入环境变量中
private struct MyEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "Default value"
}
extension EnvironmentValues {
var myCustomValue: String {
get { self[MyEnvironmentKey.self] }
set { self[MyEnvironmentKey.self] = newValue }
}
}
//写
ContentView().environment(\.myCustomValue, "Hong")
//读
@Environment(\.myCustomValue) var myCustomValue: String
nice ?
网友评论