Swift中map方法的静态方法封装实现问题
Swift实例方法转静态调用问题解答
可编译的代码实现
你尝试的Set.map(numbers) { $0 * 2 }无法直接编译,因为map是Sequence协议的扩展方法,并非Set自身定义的方法。正确的静态调用方式需要依托Sequence类型:
let numbers = Set([1, 2, 3]) let doubled = Sequence.map(numbers) { $0 * 2 } print(doubled) // [2, 4, 6]
如果需要更明确地关联Set类型,也可以通过类型转换的方式调用,但核心逻辑依然基于Sequence的实现:
let numbers = Set([1, 2, 3]) let doubled = (Set<Int> as Sequence.Type).map(numbers) { $0 * 2 } print(doubled) // [2, 4, 6]
特性官方名称
该特性的英文官方名称是Instance Method Currying,中文译为实例方法柯里化。在Swift中,所有实例方法都会被隐式处理为柯里化函数——类型层面的对应函数会将实例本身作为第一个参数,后续参数则与原实例方法的参数一一对应。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

