你应该知道的5个Swift组合变换操作符

看白癜风到中科白癜风医院 http://pf.39.net/bdfyy/tslf/

全文共字,预计学习时长11分钟

图源:unsplash

想随时随地轻松变更数据格式?本文将教你5种解法!我将在XcodePlayground中创建示例函数,运行它们并观察结果。

1.map

.map操作符允许我们转换闭包中来自发布者的所有元素。

varsubscriptions=SetAnyCancellable()

funcmapExample(){

letsubject=PassthroughSubjectInt,Never()

subject

.map{(integer)in

returnString(integer)

}

.sink(receiveValue:{

print(Value:\(0),Type:\(type(of:0)))

})

.store(in:subscriptions)

subject.send(12)

subject.send(31)

subject.send(55)

subject.send(4)

subject.send(18)

}

下面是这段代码的作用:

·创建一个接受Int值的PassthroughSubject。

·使用.map操作符将每个接收到的Int值转换为String。

·然后,订阅发布者并打印转换后的元素的值和类型。

·向受试者发送随机数以观察以下结果:

还有一种巧妙的方法来使用对象的键路径获取对象的属性:

funcmapKeyPathExample(){

structCarBrand{

lettitle:String

letcountry:String

}

letcarBrandsSubject=PassthroughSubjectCarBrand,Never()

carBrandsSubject

.map(\.country)

.sink(receiveValue:{countryin

print(Country:\(country))

})

.store(in:subscriptions)

carBrandsSubject.send(

CarBrand(title:MercedesBenz,country:Germany)

)

carBrandsSubject.send(

CarBrand(title:Ford,country:USA)

)

carBrandsSubject.send(

CarBrand(title:Honda,country:Japan)

)

}

使用.map(\.country),可以访问CarBrand的国家属性。然后只需打印每个国家:

2.replaceNil

顾名思义,.replaceNil操作符将每个接收到的nil元素转换为指定的元素:

funcreplaceNilExample(){

letvalues:[Int?]=[,nil,nil,12,10]

letvaluesPublisher=values.publisher

valuesPublisher

.replaceNil(with:0)

.map{0!}

.collect()

.sink(receiveValue:{print(0)})

.store(in:subscriptions)

}

请注意,还可以将多个操作符组合在一起以达到必要的结果。首先将每个nil值替换为0,然后强制解开值,最后将所有值收集在一个数组中:

需要注意的是在.map操作符中使用强制展开的方法。如果你不喜欢强行解包该怎么办?我们还有一个.map协变量:.


转载请注明:http://www.aierlanlan.com/rzgz/2306.html