參考:類(lèi)的的繼承與類(lèi)的訪問(wèn)權(quán)限
參考:swift中的泛型
參考:數(shù)組安全索引與數(shù)組切片
在Struct中的函數(shù),默認(rèn)(不添加mutating關(guān)鍵字)的函數(shù)對(duì)Struct中屬性只有只讀權(quán)限。如果你添加上mutating, 那么該函數(shù)就對(duì)屬性持有讀寫(xiě)的權(quán)限。
結(jié)構(gòu)體
- 結(jié)構(gòu)體類(lèi)型的定義
//結(jié)構(gòu)體類(lèi)型的定義
struct MyPoint {
var x:Float = 0
var y:Float = 0
mutating func setMyPoint(tempx:Float, tempy:Float) {
x = tempx
y = tempy
}
func display() {
print("\(x),\(y)")
}
}
var testPoint = MyPoint(x: 10, y: 10)
testPoint.display()
class
- class 的創(chuàng)建與使用
class MyPoint {
var x:Float = 0
var y:Float = 0
init(x:Float = 1, y:Float = 1) {
self.x = x
self.y = y
}
func setMyPoint(tempx:Float, tempy:Float) {
x = tempx
y = tempy
}
func display() {
print("\(x),\(y)")
}
}
var testPoint = MyPoint()
testPoint.x
testPoint.y
var test2 = MyPoint(x: 10, y: 20)
test2.x
test2.y
var test3 = MyPoint(x: 10)
test3.x
test3.y
被final關(guān)鍵字所修飾的類(lèi)是不能用來(lái)繼承的
- 訪問(wèn)權(quán)限
- public: 公有訪問(wèn)權(quán)限,類(lèi)或者類(lèi)的公有屬性或者公有方法可以從文件或者模塊的任何地方進(jìn)行訪問(wèn)。那么什么樣才能成為一個(gè)模塊呢?一個(gè)App就是一個(gè)模塊,一個(gè)第三方API, 第三等方框架等都是一個(gè)完整的模塊,這些模塊如果要對(duì)外留有訪問(wèn)的屬性或者方法,就應(yīng)該使用public的訪問(wèn)權(quán)限。
- private: 私有訪問(wèn)權(quán)限,被private修飾的類(lèi)或者類(lèi)的屬性或方法可以在同一個(gè)物理文件中訪問(wèn)。如果超出該物理文件,那么有著private訪問(wèn)權(quán)限的屬性和方法就不能被訪問(wèn)。
- internal: 顧名思義,internal是內(nèi)部的意思,即有著internal訪問(wèn)權(quán)限的屬性和方法說(shuō)明在模塊內(nèi)部可以訪問(wèn),超出模塊內(nèi)部就不可被訪問(wèn)了。在Swift中默認(rèn)就是internal的訪問(wèn)權(quán)限。
泛型
- 泛型函數(shù)
- 單一占位符泛型函數(shù)
//泛型 `MyCustomeType`泛型占位符傳入的參數(shù)是什么類(lèi)型`MyCustomeType`就是什么類(lèi)型
//number1,number2要都是相同的數(shù)據(jù)類(lèi)型(單一占位符泛型函數(shù))
func swap<MyCustomeType> ( number1:inout MyCustomeType, number2:inout MyCustomeType) {
let temp = number1
number1 = number2
number2 = temp
}
var tmpStr1 = "sssss"
var tmpstr2 = "xxxxx"
swap(&tmpStr1, &tmpstr2)
tmpStr1//xxxxx
tmpstr2//sssss
- 多個(gè)占位符的泛型函數(shù)
//參數(shù)使用的是不同的泛型占位符,所以其類(lèi)型允許是不同的
func conect<FirstType, SecondType>(number1:FirstType, number2:SecondType) -> String {
let tmp = "\(number1)" + "\(number2)"
return tmp
}
let resulet = conect(number1: 10, number2: 10.2)//1010.2
let resulet2 = conect(number1: "aaa", number2: 1000)//aaa1000
- 泛型類(lèi)
//泛型類(lèi)型數(shù)組,
class MyTestClass<MyCustomType> {
var values = [MyCustomType]()
func display() {
for (index, item) in values.enumerated() {
print(item)
}
}
}
let myClass = MyTestClass<String>()
myClass.values = ["aaa", "bbb", "ccc"]
myClass.display()//aaa,bbb,ccc
數(shù)組切片
- zip()函數(shù)
zip()函數(shù)接收兩個(gè)序列,并且返回一個(gè)Zip2Sequence類(lèi)型的數(shù)據(jù)
var zip1 = [1,2,3,4,5,6]
var zip2 = [9,8,7,6]
let zip12 = zip(zip1, zip2)
//[[1,2,3,4,5,6],[9,8,7,6]]
for (index, item) in zip12 {
print("zip1:\(index), zip2:\(item)")
}
<!--輸出是成對(duì)遍歷的,如果某個(gè)數(shù)組中的元素是多余的,那么就會(huì)被忽略掉。-->
/*
zip1:1, zip2:9
zip1:2, zip2:8
zip1:3, zip2:7
zip1:4, zip2:6
*/
- 數(shù)組切片
數(shù)組切片的下標(biāo)與原始數(shù)組中的下標(biāo)保持一致。如果要取出切片arraySlices中的第一個(gè)值,我們要使用arraySlices[3], 而不是arraySlices[0]
var arrtest = "0123456789".characters.map({String($0)})
arrtest//["0","1","2","3","4","5","6","7","8","9"]
var arrSlices = arrtest[3...6] //["3","4","5","6"]
arrSlices[3]//"3"
//切片是原始數(shù)組的部分拷貝,所以修改切片或者修改原數(shù)組,兩者互不影響,
//如果把切片轉(zhuǎn)換成枚舉,那么切片中與原始數(shù)組對(duì)應(yīng)的下標(biāo)關(guān)系將不存在
let enumerate = arrSlices.enumerated()
dump(enumerate)
for a in enumerate {
print("a = \(a), a.0=\(a.0), a.1 = \(a.1)")
}
/*
a = (offset: 0, element: "3"), a.0=0, a.1 = 3
a = (offset: 1, element: "4"), a.0=1, a.1 = 4
a = (offset: 2, element: "5"), a.0=2, a.1 = 5
a = (offset: 3, element: "6"), a.0=3, a.1 = 6
*/
arrtest.remove(at: 1)
String removeAtIndex(): 移除指定索引的元素,并且返回被移除的元素。
String removeFrist(): 移除第一個(gè)元素,并返回被移除的元素。
Void removeFirst(n: Int): 這個(gè)函數(shù)的意思是移除數(shù)組前方的幾個(gè)元素,如果n = 1, 的話就移除前面一個(gè)元素這時(shí)與String removeFirst()函數(shù)功能相同。如果n = 3, 就移除前3個(gè)元素。
?String removeLast(): 移除數(shù)組中最后一個(gè)元素。
運(yùn)算符
- ??
/*
在??運(yùn)算符中能確保使用的可選類(lèi)型變量中有值,如果沒(méi)有值就不打開(kāi)使用,可以把!省略掉。
*/
var developLanguage:String?
var selectLanguage:String
selectLanguage = developLanguage ?? "swift"http://"swift"
developLanguage = "Object-C"
selectLanguage = developLanguage ?? "swift"http://"Object-C"
...閉區(qū)間,..>半開(kāi)區(qū)間