關於Swift中的泛函式find的問題

2022-05-11 22:34:33 字數 734 閱讀 8936

對於乙個陣列array,我們往往需要判斷其是否包含某個子項,又或者要查詢某個子項是否在這個陣列中。

假設有這樣乙個包含座標的陣列

1    var pointarray:[cgpoint] = [cgpoint(x: 2,y: 3),cgpoint(x: 4,y: 5),cgpoint(x: 2,y: 7),cgpoint(x: 3,y: 8),cgpoint(x: 2,y: 9),cgpoint(x: 0,y: 3)]

如何判斷該陣列是否包含某個點,這個點的x座標為3呢?

var a = contains(pointarray, )

contains就是乙個謂詞函式,$0表示復用的陣列元素,這個是swift的約定

contains只能返回是否包含該子項,不能返回該子項,如果需要返回該子項所在的索引用find函式

比如查詢(4,5)這個點在陣列中的索引序號

var index = find(pointarray, cgpoint(x:4,y:5))

執行之後,index = 1

如果你想要查詢上面的x座標為3的點,怎麼查詢?c#裡邊有linq語句,和資料庫查詢類似的語句,無所不能,swift可沒有這麼強大,

提供的find函式還不支援謂詞的查詢(可能以後會加上)

其實自己寫這個函式也很簡單:

func findindex(seq: s, predicate: (s.generator.element) -> l) -> int?)

Swift 中的泛型

定義乙個交換兩個值得泛型函式 func swaptwovalues a inout t,b inout t var num1 11 var num2 22 swaptwovalues num1,num2 print num1 num1 num2 num2 var str1 11 var str2 2...

關於Swift3 0中的type of 函式

當然,就目前而言,如果我們想在乙個例項方法中方便訪問當前類的類屬性和類方法,那麼可以直接使用type of self 即可,這可能比直接用classname.classmethod 要更通用化一些,或更簡潔一些 如果你的類名比較長的話 下面給出一段 例子 class myclass func met...

Swift中協議與泛型的應用

1.方法的泛型 泛型約束 冒號後邊跟class或者協議,傳入的引數somet和someu必須是遵循該協議或類 naarray類,comparable協議 func somefunction somet t,someu u func compartwo a t,b t bool與oc中的id有點類似,...