Apple文档的语法在哪里解释? (特别是 swiftUI 文档)

Where is the syntax of Apple documentation explained? (Specifically swiftUI documentation)

苹果软件的语法说明在哪里?例如,当我查找 SwiftUI 的 'List'(Xcode 中的 cmd-shift-0)时,我看到了其他选项:

init<Data, ID, RowContent>(Data, id: KeyPath<Data.Element, ID>, selection: Binding<Set<SelectionValue>>?, rowContent: (Data.Element)
-> RowContent)

太棒了!尖括号是什么意思? "RowContent" 与 "rowContent" 的意义是什么?等。我实际上写了什么来制作清单?这个语法的解释在哪里?

如果这是行业标准(我不这么认为)是什么标准?我不需要一个完全菜鸟的解释,但我需要比我拥有的更多的东西。

1. 如果您查看 List 的 Apple 文档,您的问题中有关于 init 函数的更多信息。

这里的格式如下:

// List declaration
struct List<SelectionValue, Content>
  where 
     SelectionValue : Hashable, 
     Content : View

// init declaration
init<Data, ID, RowContent>(
  _ data: Data, 
  id: KeyPath<Data.Element, ID>, 
  selection: Binding<SelectionValue?>?, 
  @ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
) where 
   Content == ForEach<Data, ID, HStack<RowContent>>, 
   Data : RandomAccessCollection, 
   ID : Hashable, 
   RowContent : View

有点啰嗦,我同意。

2. 尖括号用于 Generics。这是一个大话题,您需要了解该语言才能继续。

简而言之,泛型是最终具体类型(StringIntHStackFoo 等)的占位符将被使用,由该函数的用户定义。

通用占位符类型可以约束以符合特定的协议或继承自某个class。这是通过 where 子句完成的。

3. 所以,一个一个:

列表有 2 个占位符:SelectionValueContent(可以命名为任何名称,例如 <T, U>):

struct List<SelectionValue, Content>

并且这些占位符受到限制:

where
   SelectionValue : Hashable, 
   Content : View

它们分别被限制为符合 HashableView

所以,基本上,只要你在其函数定义中看到 Content,就意味着它可以是 View 的任何实现。 SelectionValue.

同样

继续:

init<Data, ID, RowContent>

除了 List 声明的占位符之外,init 还泛化为大约三个额外的占位符:DataIDRowContent , 也受约束:

where 
   Content == ForEach<Data, ID, HStack<RowContent>>, 
   Data : RandomAccessCollection, 
   ID : Hashable, 
   RowContent : View

Content:必须是 ForEach(特定类型)。你实际上不应该关心它,因为 Content 不是 init

的任何参数类型

Data:任何符合RandomAccessCollection的类型,例如Array

ID:任何符合Hashable

的类型

RowContent: 任何符合 View 的类型 - 基本上任何 View

4. 现在,对于参数:

init<Data, ID, RowContent>(
  _ data: Data, 
  id: KeyPath<Data.Element, ID>, 
  selection: Binding<SelectionValue?>?, 
  @ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
)

_ data:是 Data 类型的未标记参数,它(见上文)类似于数组

id:是一个KeyPath(也是一个你应该学习的topic of Swift),但是简单来说,一个表达式指向一个属性的一个目的。在这种情况下,对象是 Data 的一个元素(例如数组),而 属性 是任何 ID(又名 Hashable)。

selection: 是一个BindingRead more about bindings in SwiftUI, and more about property wrappers (a Binding is available via a @State property wrapper)。但它基本上使您能够将状态变量传递给视图,以便它可以在不拥有数据的情况下更改状态变量。通过使用 $ 前缀访问其投影值,绑定与 @State 包装的 属性 密切相关。请参阅下面的示例。

rowContent: 是一个闭包,它接受所述 Data 的一个元素(例如数组的一个元素)和 returns 一个 RowContent (又名一些 View).暂时不用担心@ViewBuilder

5. 示例:

let strArray = ["One", "Two", "Three"]
@State var selection: String? = 0

// ...

List(strArray, id: \.self, selection: $selection, rowContent: { str in
  return Text(str)
})

strArray:是一个数组,所以满足Data

的泛型约束

\.self:关键路径表达式,指向self(String,符合Hashable)

selection:绑定到状态变量selection$selection 是该变量的投影值,SwiftUI 方便地将其制成 Binding 类型。

rowContent: 是对数组的每个元素的闭包和 returns 一个 Text 视图。