Swift--結(jié)構(gòu)體struct、類(lèi)class、泛型、數(shù)組切片

參考:類(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)限。

泛型

  1. 泛型函數(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
  1. 泛型類(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ū)間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容