Swift--结构体struct、类class、泛型、数组切片

参考:类的的继承与类的访问权限
参考:swift中的泛型
参考:数组安全索引与数组切片

在Struct中的函数,默认(不添加mutating关键字)的函数对Struct中属性只有只读权限。如果你添加上mutating, 那么该函数就对属性持有读写的权限。

结构体

  • 结构体类型的定义
//结构体类型的定义
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 的创建与使用
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关键字所修饰的类是不能用来继承的

  • 访问权限
    • public: 公有访问权限,类或者类的公有属性或者公有方法可以从文件或者模块的任何地方进行访问。那么什么样才能成为一个模块呢?一个App就是一个模块,一个第三方API, 第三等方框架等都是一个完整的模块,这些模块如果要对外留有访问的属性或者方法,就应该使用public的访问权限。
    • private: 私有访问权限,被private修饰的类或者类的属性或方法可以在同一个物理文件中访问。如果超出该物理文件,那么有着private访问权限的属性和方法就不能被访问。
    • internal: 顾名思义,internal是内部的意思,即有着internal访问权限的属性和方法说明在模块内部可以访问,超出模块内部就不可被访问了。在Swift中默认就是internal的访问权限。

泛型

  1. 泛型函数
  • 单一占位符泛型函数
//泛型 `MyCustomeType`泛型占位符传入的参数是什么类型`MyCustomeType`就是什么类型
//number1,number2要都是相同的数据类型(单一占位符泛型函数)
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
  • 多个占位符的泛型函数
//参数使用的是不同的泛型占位符,所以其类型允许是不同的
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. 泛型类
//泛型类型数组,
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

数组切片

  • zip()函数

zip()函数接收两个序列,并且返回一个Zip2Sequence类型的数据

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)")
}
<!--输出是成对遍历的,如果某个数组中的元素是多余的,那么就会被忽略掉。-->
/*
 zip1:1, zip2:9
 zip1:2, zip2:8
 zip1:3, zip2:7
 zip1:4, zip2:6
 */
  • 数组切片

数组切片的下标与原始数组中的下标保持一致。如果要取出切片arraySlices中的第一个值,我们要使用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"
//切片是原始数组的部分拷贝,所以修改切片或者修改原数组,两者互不影响,

//如果把切片转换成枚举,那么切片中与原始数组对应的下标关系将不存在
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(): 移除第一个元素,并返回被移除的元素。
Void removeFirst(n: Int): 这个函数的意思是移除数组前方的几个元素,如果n = 1, 的话就移除前面一个元素这时与String removeFirst()函数功能相同。如果n = 3, 就移除前3个元素。
�String removeLast(): 移除数组中最后一个元素。

运算符

  • ??
/*
  在??运算符中能确保使用的可选类型变量中有值,如果没有值就不打开使用,可以把!省略掉。
 */
var developLanguage:String?
var selectLanguage:String

selectLanguage = developLanguage ?? "swift"//"swift"
developLanguage = "Object-C"
selectLanguage = developLanguage ?? "swift"//"Object-C"

...闭区间,..>半开区间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容