Swift好用的map和flatmap

2022-06-10 11:06:07 字數 1882 閱讀 3004

在swift中,map和flatmap在處理可選型別的操作上非常好用,下面就以map舉例

常規來說,我們來處理乙個可選的int值的時候,通常以下方式來處理

var num1: int? = 10

var num2 = (num1 != nil) ? (num1! + 10) : nil

對於map函式來說。就可以用下面**的方式:

var num1: int? = 10

var num3 = num1.map

兩者的列印結果如下:

var num1: int? = 10

var num2 = (num1 != nil) ? (num1! + 10

) : nil

var num3 = num1.map

print(num2)

print(num3)

//optional(20)

//optional(20)

從列印結果來說,兩者的效果是等價的,可以說map函式非常方便

而swift中的map和flatmap效果基本上是等效,下面是兩者比較的**

var num1: int? =nil

var num2 = num1.map

var num0 = num1.flatmap

print(num2)

print(num0)

var num3: int? = 20

var num4 = num3.map

var num5 = num3.flatmap

print(num4)

print(num5)

列印結果如下:

nil

niloptional(40)

optional(

40)

從列印結果來說,兩個函式的列印結果是相同,也就是等價於效果是等效的

差異的地方對面下面函式的列印結果:

//

分別在函式傳入的閉包中,再加上乙個可選的盒子

var num1: int? = 10

var num2 = num1.map

var num3 = num1.flatmap

print(num2)

print(num3)

列印結果如下:

optional(optional(20

))optional(

20)

對比可知,flatmap的輸出結果的時候,會只剩餘乙個可選項的包裝層

檢視官方文件的方法注釋如下:

///

evaluates the given closure when this `optional` instance is not `nil`,

///在取被給與的閉包中乙個可選並不為空的例項的的值時

//////

傳遞開啟的值作為乙個引數

///use the `map` method with a closure that returns a non-optional value.

///此時使用map方式會返回乙個不可選的值

/////

evaluates the given closure when this `optional` instance is not `nil`,

//////

///use the `flatmap` method with a closure that returns an optional value.

///此時使用map方式會返回乙個可選的值

//

對比可知,區別在於flagmap最後會對返回值進行解包,所以會導致上面列印結果的區別

Swift 和?的使用

swift語言使用var定義變數,但是和別的語言不同,swift不會自動給變數賦初始值,也就是申明的變數不會有預設值,所以要求在使用之前不要對其初始化。如果在變數使用之前木有初始化就會報錯 var mystring string print mystring program ended with e...

好用的函式sign和decode

今天遇到了乙個問題,需要對比乙個欄位和5的大小,大於5的輸出0,小於五的輸出1。如果是用plsql程式設計的話可以用if else這種邏輯進行判斷,但是在sql裡可不能這麼寫,經過推薦,我組合使用了sign和decode,效果很好,小清新。如下 decode sign trunc col1 col2...

好用的函式sign和decode

今天遇到了乙個問題,需要對比乙個欄位和5的大小,大於5的輸出0,小於五的輸出1。如果是用plsql程式設計的話可以用if else這種邏輯進行判斷,但是在sql裡可不能這麼寫,經過推薦,我組合使用了sign和decode,效果很好,小清新。如下 decode sign trunc col1 col2...