Swift中array.map(CGFloat.init(_:))的作用是什么?
关于Swift中
CGFloat.init(_:)在map中的用法解释 首先,这段代码里的CGFloat.init(_:)本质是CGFloat的一个初始化器函数,你可以把它当成普通函数传递给map方法,具体拆解如下:
- 初始化器的本质
Swift里的初始化器(init)本身属于一等函数。CGFloat有一个接收Int类型参数的初始化器,声明逻辑大致是:
extension CGFloat { init(_ value: Int) }
这里的下划线_表示调用该初始化器时无需写参数标签,所以平时你可以直接写CGFloat(100),不用写成CGFloat.init(value: 100)。
适配
map的原因
对于[Int]类型的数组,map方法需要一个(Int) -> CGFloat类型的转换函数——也就是接收一个Int、返回一个CGFloat的函数。而CGFloat.init(_:)的签名正好匹配这个类型:它接收Int参数,返回CGFloat实例,因此可以直接传递给map,替代手动编写闭包。等价写法对比
这段代码和下面的闭包写法完全等效,只是前者更简洁:
let floats = array.map { CGFloat($0) }
两种写法的最终效果都是把数组里的每个Int元素转换成CGFloat类型。
- 查阅文档的方向
- 可以看Swift官方文档中“初始化器作为一等函数”的相关内容,了解初始化器可像普通函数一样传递、赋值的特性。
- 直接查看
CGFloat的初始化器文档,找到接收Numeric类型(包含Int)的那个初始化器,就能看到它的参数标签为_,以及具体使用说明。
内容的提问来源于stack exchange,提问作者clearlight
相关产品推荐
相关产品推荐

