了解Swift映射定义中的Self.Generator.Element

了解Swift映射定义中的Self.Generator.Element,swift,functional-programming,closures,Swift,Functional Programming,Closures,斯威夫特在这里 许多函数在闭包定义的参数中都有Self.Generator.Element。到底是什么?我试着去理解这个定义,但我没有去任何地方 public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T] public func映射(@noescape transform:(Self.Generator.Element)抛出->T)再抛出->[

斯威夫特在这里

许多函数在闭包定义的参数中都有Self.Generator.Element。到底是什么?我试着去理解这个定义,但我没有去任何地方

public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
public func映射(@noescape transform:(Self.Generator.Element)抛出->T)再抛出->[T]

这是一系列已解析的通用协议类型。Self是这个通用协议的采用者,它有一个名为Generator的关联类型,GeneratorType采用GeneratorType,GeneratorType本身就是一个通用协议,它有一个名为Element的关联类型。因此Self.Generator.Element是该类型解析为的任何类型

该链位于序列(或集合)及其元素之间关系的基础上。例如,如果Self是CollectionType,则Self.Generator.Element是集合元素的类型

因此,例如,一个字符串数组,类型为
Array
[String]
,是一个其Self.Generator.Element为String的集合。因此
map
方法的
transform
函数(在您的示例中)将字符串作为其参数


(请注意,
map
没有说明
transform
函数输出的类型;它是一个纯泛型占位符T。编译器希望在编译时看到实际函数时能够解析T。)

这是一系列已解析的泛型协议类型。Self是这个通用协议的采用者,它有一个名为Generator的关联类型,GeneratorType采用GeneratorType,GeneratorType本身就是一个通用协议,它有一个名为Element的关联类型。因此Self.Generator.Element是该类型解析为的任何类型

该链位于序列(或集合)及其元素之间关系的基础上。例如,如果Self是CollectionType,则Self.Generator.Element是集合元素的类型

因此,例如,一个字符串数组,类型为
Array
[String]
,是一个其Self.Generator.Element为String的集合。因此
map
方法的
transform
函数(在您的示例中)将字符串作为其参数


(请注意,
map
没有说明
transform
函数输出的类型;它是一个纯泛型占位符T。编译器希望在编译时看到实际函数时能够解析T。)

这是有意义的。例如,一个字符串数组,类型数组或[String],是一个集合,其Self.Generator.Element是String。谢谢。更多信息请看我的在线书:谢谢。你的在线书籍似乎比官方文档更容易消化,这是有道理的。例如,一个字符串数组,类型数组或[String],是一个集合,其Self.Generator.Element是String。谢谢。更多信息请看我的在线书:谢谢。你的在线书籍似乎比官方文档更容易消化。