我应该如何理解 SwiftUI 中的 NavigationView 声明代码
How should I comprehend the NavigationView declaration Code in SwiftUI
SwiftUI中'NavigationView'的声明好乱(可能是我不擅长Swift)在声明'NavigationView' 是一个结构体,但初始化器甚至没有主体,就像协议声明一样。
像这样的 NavigationView 声明:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
@available(watchOS, unavailable)
public struct NavigationView<Root> where Root : View {
public init(root: () -> Root)
public var body: _View { get }
/// The type of view representing the body of this view.
///
/// When you create a custom view, Swift infers this type from your
/// implementation of the required `body` property.
public typealias Body
}
NavigationView declaration code
我复制了'NavigationView'的声明样式,写了一些类似的代码,如下。
我的仿码是这样的:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
public struct MyNavigationView<Root> where Root:View {
public init(root: () -> Root)
public var body: _View { get }
public typealias Body
}
但是有一些错误就像:
"initializer requires a body"
"Expected '{' to start getter definition"
"Expected '=' in type alias declaration"
my imitation code and errors
您看到的是 Swift 文件的 接口 。类似于头文件,它向您显示了您可以访问的此 class/struct/enum/whatever 的所有成员及其签名。
所以你不应该只复制和粘贴代码就可以编译它。这不是实际的代码。它只是告诉您每个成员的签名。例如,通过查看文件,您可以知道初始化程序采用 () -> Root
闭包。
我很确定SwiftUI不是开源的,所以你不能轻易得到它的源代码。
其实你可以通过辅助编辑器看到自己代码的接口。它就在 "Counterparts" 部分下面:
SwiftUI中'NavigationView'的声明好乱(可能是我不擅长Swift)在声明'NavigationView' 是一个结构体,但初始化器甚至没有主体,就像协议声明一样。
像这样的 NavigationView 声明:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
@available(watchOS, unavailable)
public struct NavigationView<Root> where Root : View {
public init(root: () -> Root)
public var body: _View { get }
/// The type of view representing the body of this view.
///
/// When you create a custom view, Swift infers this type from your
/// implementation of the required `body` property.
public typealias Body
}
NavigationView declaration code
我复制了'NavigationView'的声明样式,写了一些类似的代码,如下。
我的仿码是这样的:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
public struct MyNavigationView<Root> where Root:View {
public init(root: () -> Root)
public var body: _View { get }
public typealias Body
}
但是有一些错误就像:
"initializer requires a body"
"Expected '{' to start getter definition"
"Expected '=' in type alias declaration"
my imitation code and errors
您看到的是 Swift 文件的 接口 。类似于头文件,它向您显示了您可以访问的此 class/struct/enum/whatever 的所有成员及其签名。
所以你不应该只复制和粘贴代码就可以编译它。这不是实际的代码。它只是告诉您每个成员的签名。例如,通过查看文件,您可以知道初始化程序采用 () -> Root
闭包。
我很确定SwiftUI不是开源的,所以你不能轻易得到它的源代码。
其实你可以通过辅助编辑器看到自己代码的接口。它就在 "Counterparts" 部分下面: