美文网首页
Swift | SwiftUI -> Usage

Swift | SwiftUI -> Usage

作者: f8d1cf28626a | 来源:发表于2024-08-19 01:08 被阅读0次

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 ?

相关文章

网友评论

      本文标题:Swift | SwiftUI -> Usage

      本文链接:https://www.haomeiwen.com/subject/rthmkjtx.html