我应该如何理解SwiftUI中的NavigationView声明代码

时间:2019-06-20 05:49:39

标签: swift 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

1 个答案:

答案 0 :(得分:0)

您看到的是Swift文件的界面。类似于头文件,它向您显示该类/ struct /枚举/您可以访问的所有成员及其签名。

因此,您不应仅能够复制和粘贴代码并对其进行编译。这不是实际的代码。只是告诉您每个成员的签名。例如,通过查看文件,您可以知道初始化程序采用了() -> Root闭包。

我很确定SwiftUI不是开源的,因此您很难轻易获得它的源代码。

实际上,您可以通过使用助手编辑器来查看自己的代码的界面。它位于“对应”部分下:

enter image description here