前言
基上篇文章到現(xiàn)在也有段時(shí)間了,主要是小編公司開始做了一個(gè)項(xiàng)目,感覺也沒多少界面,就是愣讓小編寫了這么久,感覺還是一些知識(shí)點(diǎn)不太牢固,調(diào)試和寫起來,還是費(fèi)了一些時(shí)間。但是這篇文章小編要介紹的是,如果正確學(xué)習(xí)和使用swift里面的數(shù)組,小編自學(xué)的swift可能理解不是很透徹,多包含。
注意:本篇文章講的是如何使用swift里面的數(shù)組,只做功能的使用,原理闡述比較少(主要小編也是菜雞),以后七秒會(huì)在文章底部推薦一些利于開發(fā)的破解軟件,敬請(qǐng)期待??!今天推薦的是青花瓷 Charles
友情鏈接:
- iOS11和iPhone X的適配
- 2017年iOS面試題總結(jié)
- iOS開發(fā)個(gè)人開發(fā)賬號(hào)的證書詳細(xì)使用及介紹
- 自定義XIB View里面添加其他自定義Xib View
1.數(shù)組的可變性
swift里面的數(shù)組都是具有值語義性(也就是深拷貝),當(dāng)你使用數(shù)組賦值或者傳遞參數(shù)的時(shí)候,那么這個(gè)數(shù)組就會(huì)被寫時(shí)賦值(以后文章也許會(huì)闡述到),也就是賦值或傳遞的是一個(gè)新的數(shù)組
var arrayA = [1,2,3];
let arrayB = arrayA;
arrayA.append(4);/// 在此才會(huì)使用'寫時(shí)賦值'技術(shù),之前arrayA 和arrayB都是共享內(nèi)存空間的 ,將數(shù)組傳遞給方法也是一樣的
print(arrayA);/// [1, 2, 3, 4]
print(arrayB);/// [1, 2, 3]
2.數(shù)組的一些常規(guī)方法
- 迭代數(shù)組:
for X in array
/// for 循環(huán)函數(shù)
let array = [1,2,3,5];
for x in array {
print(x);
}
- 迭代除去第一個(gè)元素以外的部分元素
for X in array.dropFirst();
/// 除去第一個(gè)值,遍歷其他的值
for x in array.dropFirst() {
print(x);
/**2 3 5*/
}
- 迭代除去最后幾個(gè)元素后的其他元素 :
for X in array.dropLast(2)
/// 除去最后3個(gè)數(shù)之后,遍歷其他的值
for x in array.dropLast(2) {
print(x);
/** 1 2 */
}
- 迭代數(shù)組中的元素和對(duì)應(yīng)的小標(biāo) :
for (index ,X) in array
for (index,x) in array.enumerated() {
print("第" + "\(index)" + "個(gè),值為" + "\(x)");
}
/**第0個(gè),值為1 第1個(gè),值為2 第2個(gè),值為3 第3個(gè),值為5*/
first和last屬性都是返回的可選值,如果數(shù)組為空。返回的就是nil。
當(dāng)數(shù)組為空的時(shí)候,就不可以使用removeLast,會(huì)造成崩潰。但是popLast將在數(shù)組不為空的時(shí)候,移除掉最后一個(gè)值,并返回它,如果數(shù)組為空,則不做任何操作。
3.map 操作
map,是將數(shù)組中的每一個(gè)元素都做一次
指定操作之后,返回一個(gè)新的數(shù)組,注意:返回的數(shù)組是在map里面新創(chuàng)建的一個(gè)數(shù)組
/// a 表示遍歷元素 Int表示返回?cái)?shù)組里面的元素的類型
let aa = array.map { (a) -> Int in
a-2;
}
print(aa);
/// map 數(shù)組遍歷后,并操作后的數(shù)據(jù)組成數(shù)組返回出去
let bb = array.map { x in
x*x;
}
print(bb);
let cc = array.map { $0-3};
print(cc);
/// map 源碼
func map<T>(_ transform:(Element)->T) -> [T] {
var result:[T] = [];
result.reserveCapacity(count);
for X in self {
result.append(transform(X));
}
return result;
}
4.filter 操作
- 檢查一個(gè)數(shù)組,將數(shù)組中滿足要求的元素過濾出來,并將它們組裝成一個(gè)新的數(shù)組,返回出去
array.filter { $0 % 2 == 0 } /// [2,4,6,8]
/// 如果你喜歡寫
array.filter { $0 % 2 == 0 }.count > 0
建議以后別寫了,在filter里面會(huì)寫創(chuàng)建一個(gè)數(shù)組的,其實(shí)我們只知道是否滿足條件的元素而已,
不需要?jiǎng)?chuàng)建新的數(shù)組,我們可以使用`contains`來實(shí)現(xiàn)的
/// filter 源碼
func filter(_ isIncluded:(Element)->Bool) -> [Element] {
var result:[Element] = [];
for X in self where isIncluded(X) {
result.append( X);
}
return result;
}
5.contains 操作
contains 將數(shù)組里面的元素,進(jìn)行一次
指定的操作,當(dāng)滿足指定要求時(shí)就會(huì)結(jié)束,并返回true,并結(jié)束迭代
let arrayC = [1,2,3,8,5,6,7];
print(arrayC.contains{ $0 % 2 == 0 }); /// true
arrayC.contains { x in
x % 2 == 0;
}
6 flatMap 操作
flatMap 是將數(shù)組的元素,進(jìn)行一個(gè)
指定操作(此操作必須返回一個(gè)數(shù)組),并將返回的數(shù)組合并成為一個(gè)新的數(shù)組。
2.也可以將兩個(gè)數(shù)組,通過一定的操作后,合并成為一個(gè)數(shù)組。操作如下,將一個(gè)數(shù)組進(jìn)行map,一個(gè)數(shù)組進(jìn)行flatMap。
注意:flatMap添加元素方式使用的是append(contentsOf:)而不是append(_:),所以制定操作返回的必須是數(shù)組
arrayA.flatMap(testArray)
/// 創(chuàng)建一個(gè)指定操作
func testArray(X:Int)->[Int]{
return [X * X];
}
/// 組合兩個(gè)數(shù)組里面的元素
let arrayD = ["J","Q","K","A"];
let arrayE = ["?","?","?","??"];
let arrayH = arrayD.flatMap { D in
arrayE.map({ E in
(D,E);
});
};
//// [("J", "?"), ("J", "?"), ("J", "?"), ("J", "??"), ("Q", "?"), ("Q", "?"), ("Q", "?"), ("Q", "??"), ("K", "?"), ("K", "?"), ("K", "?"), ("K", "??"), ("A", "?"), ("A", "?"), ("A", "?"), ("A", "??")]
/// flatMap 源碼
extension Array {
func flatMap<T>(_ transform:(Element)->[T]) -> [T] {
var result:[T] = [];
for X in self {
result.append(contentsOf: transform(X));
}
return result;
}
7,forEach 的進(jìn)行迭代
forEach其實(shí)就是和for循環(huán)一樣,都是遍歷數(shù)組,并且對(duì)數(shù)組元素進(jìn)行操作。值得注意使用forEach遍歷時(shí)候,不能像for循環(huán)那樣添加條件語句進(jìn)行return操作
forEach,里面的return操作只是返回到閉包的外面,而不能返回到外部函數(shù)作用域之外
arrayA.forEach{print($0)};/// 1,4,3,6
// 1 4
for X in arrayA {
print(X);
if X == 4 {return}
}
/// 1 4 3 6
arrayA.forEach { X in
print(X)
if X == 4 {return}
}
/// `forEach`,里面的`return`操作只是返回到閉包的外面,而不能返回到外部函數(shù)作用域之外
以后七秒會(huì)在文章里面推薦開發(fā)破解軟件
Charles是一款用于HTTP信息抓包工具,可以快速有效的獲得HTTP信息,非常利于開發(fā)者的網(wǎng)頁開發(fā)和調(diào)試修改等!Charles 有著可視化的操作界面,非常利用編輯者的使用和調(diào)試!下載地址 密碼:cxp5


如由錯(cuò)誤,請(qǐng)下方評(píng)論,七秒立即更正,如果你想要什么破解軟件,也是可以在下方留言,七秒幫你尋找