有没有办法找到实际的 SwiftUI API 文档(而不仅仅是开发人员文档)?
Is there a way to find actual SwiftUI API Documentation (and not just the developer documentation)?
我目前正在观看 WWDC 2019 的 SwiftUI Essentials 视频,演示者提取了 VStack 的实际 API,其中(令人难以置信,至少对我而言)详细说明了这个特定结构的实际工作原理。
开发人员是否可以在某个地方找到有关 Apple 提供的特定功能的此类详细、深入的文档?
Matt Stevens 提供了一个很棒的 APIdiff (http://codeworkshop.net/objc-diff/sdkdiffs/) 站点,但它都链接回 Apple 的标准开发人员文档页面。
演示者提供的示例代码:
public struct VStack<Content : View> : View {
public init(
alignment: HorizontalAlignment = .center,
spacing: Length? = nil,
@ViewBuilder content: () -> Content
)
}
实际提供的文档代码:
struct VStack<Content> where Content : View
上面关于对齐默认值和单独的间距长度的细节,虽然超级简单,但已经作为单独的 SO 问题在整个网站上被问及默认行为是什么以及为什么是这样。
我想我要问的是当前的,例如 UIKit 中更完善的 classes,有没有办法查看 class 本身的实际实现细节例如在此 WWDC 中显示的 SwiftUI VStack?我不确定这是否是 Apple 从未公开过的信息,是人们随着时间的推移了解到的信息(这在某种程度上“只是因为”我们从经验中知道这一点),或者这是否只是事实SwiftUI 是新的,Apple 还没有时间巩固 SwiftUI 和文档。
抱歉,如果有人问过这个问题,或者这是一个非常明显的问题,我对软件开发总体来说还是个新手。
谢谢!
现在关于 SwiftUI 的文档非常少。但我想它会继续从官方和辅助资源中成长和改进。
以下是我现在要使用的主要资源:
- 官方:https://developer.apple.com/tutorials/swiftui/resources
- 黑客攻击swift:https://www.hackingwithswift.com/quick-start/swiftui
您还可以在 Xcode 11.0 beta shift+command 0
中查看文档,并在 SwiftUI 下拉菜单下查看。
您在该演示文稿中展示的不是实施细节。就是VStack
的publicinit
方法。请注意,它没有方法体——它不是 init
方法的实现,只有它的类型签名。
您可以找到从 the VStack
documentation under the “Creating a Stack” target. Here's the documentation page for that init
method 链接的相同信息。
您还可以在 Xcode.
中看到这样的方法签名,如果有的话,还有文档注释
在Xcode11中,从菜单栏中选择“文件”>“快速打开...”(默认快捷方式:⇧⌘O)。在“快速打开”栏中输入“swiftui”:
打开“SwiftUI.h”。话不多说:
// Copyright © 2015 Apple Inc. All rights reserved.
#import <AppKit/AppKit.h>
现在单击编辑器左上角的“相关项目”图标,然后从菜单中选择“生成的界面”> SwiftUI:
然后,在编辑器顶部的跳转栏中点击“SwiftUI”右侧的“No Selection”,在打开的跳转菜单中输入“vstack” :
Xcode跳转到struct VStack
的定义:
/// A view that arranges its children in a vertical line.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct VStack<Content> where Content : View {
/// Creates an instance with the given `spacing` and Y axis `alignment`.
///
/// - Parameters:
/// - alignment: the guide that will have the same horizontal screen
/// coordinate for all children.
/// - spacing: the distance between adjacent children, or nil if the
/// stack should choose a default distance for each pair of children.
@inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, content: () -> Content)
/// 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 = Never
}
不幸的是,这个(合成的)声明在 content
参数上省略了 @ViewBuilder
属性。这个遗漏可能是一个错误。
除了省略注释之外,Swift 生成的接口还省略了以 _
开头的类型、方法和属性。 (它省略了这些,因为它们被认为是实现细节,无论出于何种原因必须制作 public。)例如,请注意 VStack
的生成接口也没有提到 VStack
符合View
。 (The reference documentation也没提。)
之所以生成的接口和参考文档都没有告诉我们VStack
符合View
是因为VStack
没有直接符合View
. VStack
符合_UnaryView
,_UnaryView
是View
的子协议。
你可以看到VStack
真正的honest-to-dogpublic接口——当你的源代码导入时编译器实际使用的是什么SwiftUI——通过追踪模块的 .swiftinterface
文件。您可以在此路径中找到它,相对于您的 Xcode.app
:
Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64.swiftinterface
(因此,如果您尚未重命名 Xcode 11 beta 并将其放在 /Applications
中,请将 /Applications/Xcode-beta.app/
放在该路径的前面。
如果您在该文件中搜索 struct VStack
,您将找到 VStack
的真正 public 界面:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
@_fixed_layout public struct VStack<Content> : _UnaryView where Content : SwiftUI.View {
@usableFromInline
internal var _tree: _VariadicView.Tree<_VStackLayout, Content>
@inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, @SwiftUI.ViewBuilder content: () -> Content) {
_tree = .init(
root: _VStackLayout(alignment: alignment, spacing: spacing), content: content())
}
public static func _makeView(view: _GraphValue<VStack>, inputs: _ViewInputs) -> _ViewOutputs
public static func _makeViewList(view: _GraphValue<VStack>, inputs: _ViewListInputs) -> _ViewListOutputs
public typealias Body = Swift.Never
}
请注意,.swiftinterface
文件不合并扩展名。 VStack
没有任何扩展名,但是(例如)Color
有,所以如果你想看到 Color
的真实 public 接口,你需要搜索struct Color
和 extension Color
.
我目前正在观看 WWDC 2019 的 SwiftUI Essentials 视频,演示者提取了 VStack 的实际 API,其中(令人难以置信,至少对我而言)详细说明了这个特定结构的实际工作原理。
开发人员是否可以在某个地方找到有关 Apple 提供的特定功能的此类详细、深入的文档?
Matt Stevens 提供了一个很棒的 APIdiff (http://codeworkshop.net/objc-diff/sdkdiffs/) 站点,但它都链接回 Apple 的标准开发人员文档页面。
演示者提供的示例代码:
public struct VStack<Content : View> : View {
public init(
alignment: HorizontalAlignment = .center,
spacing: Length? = nil,
@ViewBuilder content: () -> Content
)
}
实际提供的文档代码:
struct VStack<Content> where Content : View
上面关于对齐默认值和单独的间距长度的细节,虽然超级简单,但已经作为单独的 SO 问题在整个网站上被问及默认行为是什么以及为什么是这样。
我想我要问的是当前的,例如 UIKit 中更完善的 classes,有没有办法查看 class 本身的实际实现细节例如在此 WWDC 中显示的 SwiftUI VStack?我不确定这是否是 Apple 从未公开过的信息,是人们随着时间的推移了解到的信息(这在某种程度上“只是因为”我们从经验中知道这一点),或者这是否只是事实SwiftUI 是新的,Apple 还没有时间巩固 SwiftUI 和文档。
抱歉,如果有人问过这个问题,或者这是一个非常明显的问题,我对软件开发总体来说还是个新手。
谢谢!
现在关于 SwiftUI 的文档非常少。但我想它会继续从官方和辅助资源中成长和改进。
以下是我现在要使用的主要资源:
- 官方:https://developer.apple.com/tutorials/swiftui/resources
- 黑客攻击swift:https://www.hackingwithswift.com/quick-start/swiftui
您还可以在 Xcode 11.0 beta shift+command 0
中查看文档,并在 SwiftUI 下拉菜单下查看。
您在该演示文稿中展示的不是实施细节。就是VStack
的publicinit
方法。请注意,它没有方法体——它不是 init
方法的实现,只有它的类型签名。
您可以找到从 the VStack
documentation under the “Creating a Stack” target. Here's the documentation page for that init
method 链接的相同信息。
您还可以在 Xcode.
中看到这样的方法签名,如果有的话,还有文档注释在Xcode11中,从菜单栏中选择“文件”>“快速打开...”(默认快捷方式:⇧⌘O)。在“快速打开”栏中输入“swiftui”:
打开“SwiftUI.h”。话不多说:
// Copyright © 2015 Apple Inc. All rights reserved.
#import <AppKit/AppKit.h>
现在单击编辑器左上角的“相关项目”图标,然后从菜单中选择“生成的界面”> SwiftUI:
然后,在编辑器顶部的跳转栏中点击“SwiftUI”右侧的“No Selection”,在打开的跳转菜单中输入“vstack” :
Xcode跳转到struct VStack
的定义:
/// A view that arranges its children in a vertical line.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct VStack<Content> where Content : View {
/// Creates an instance with the given `spacing` and Y axis `alignment`.
///
/// - Parameters:
/// - alignment: the guide that will have the same horizontal screen
/// coordinate for all children.
/// - spacing: the distance between adjacent children, or nil if the
/// stack should choose a default distance for each pair of children.
@inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, content: () -> Content)
/// 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 = Never
}
不幸的是,这个(合成的)声明在 content
参数上省略了 @ViewBuilder
属性。这个遗漏可能是一个错误。
除了省略注释之外,Swift 生成的接口还省略了以 _
开头的类型、方法和属性。 (它省略了这些,因为它们被认为是实现细节,无论出于何种原因必须制作 public。)例如,请注意 VStack
的生成接口也没有提到 VStack
符合View
。 (The reference documentation也没提。)
之所以生成的接口和参考文档都没有告诉我们VStack
符合View
是因为VStack
没有直接符合View
. VStack
符合_UnaryView
,_UnaryView
是View
的子协议。
你可以看到VStack
真正的honest-to-dogpublic接口——当你的源代码导入时编译器实际使用的是什么SwiftUI——通过追踪模块的 .swiftinterface
文件。您可以在此路径中找到它,相对于您的 Xcode.app
:
Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64.swiftinterface
(因此,如果您尚未重命名 Xcode 11 beta 并将其放在 /Applications
中,请将 /Applications/Xcode-beta.app/
放在该路径的前面。
如果您在该文件中搜索 struct VStack
,您将找到 VStack
的真正 public 界面:
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
@_fixed_layout public struct VStack<Content> : _UnaryView where Content : SwiftUI.View {
@usableFromInline
internal var _tree: _VariadicView.Tree<_VStackLayout, Content>
@inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, @SwiftUI.ViewBuilder content: () -> Content) {
_tree = .init(
root: _VStackLayout(alignment: alignment, spacing: spacing), content: content())
}
public static func _makeView(view: _GraphValue<VStack>, inputs: _ViewInputs) -> _ViewOutputs
public static func _makeViewList(view: _GraphValue<VStack>, inputs: _ViewListInputs) -> _ViewListOutputs
public typealias Body = Swift.Never
}
请注意,.swiftinterface
文件不合并扩展名。 VStack
没有任何扩展名,但是(例如)Color
有,所以如果你想看到 Color
的真实 public 接口,你需要搜索struct Color
和 extension Color
.