最近在学习swift,期间也看了不少教程和大神的博客,最后把笔记放这里,方便查看复习~swift
附上学习资料地址:w3cschool-Swift 教程 、 YungFan大神的简书(推荐看一下,有些知识点总结地简直通俗易懂)markdown
enum
:枚举是一种类型,能够像类和结构体同样,拥有本身的属性和方法函数
swift中的枚举,能够提供的值类型有:字符串,字符,整型值,浮点值等。这一点不一样于oc,oc中是默认整型值oop
//定义Int类型的枚举
enum CompassPoint:Int {
case North
case South
case East
case West
}
let stt: CompassPoint = .South
//经过rawValue拿到原始值,由于是int类型,默认从0开始
print(stt.rawValue)
复制代码
经过rawValue
获取枚举值设定的原始值学习
注意:spa
遍历:code
//经过声明的时候添加 CaseIterable 来容许遍历
enum CompassPoint:Int, CaseIterable {
case North
case South
case East
case West
}
//经过allCases进行遍历
for method in CompassPoint.allCases {
print(method)
}
复制代码
struct
:声明结构体,内部能够声明成员变量、成员方法。所以更接近于一个类,能够说是类的一个轻量化实现orm
注意:对象
结构体实例老是经过值传递来定义你的自定义数据类型。继承
结构体老是经过被复制的方式在代码中传递,所以它的值是不可修改的。
若是要在成员方法中去改变成员属性,须要关键字mutating
struct Person {
var name = "Zhangsan"
var age = 10
var sex = "man"
func say(){
print("人会说话")
}
}
//初始化写法1:只有成员变量拥有默认值的时候才能使用
var p1 = Person()
//初始化写法2:从新赋值
var p2= Person(name: "Lisi", age: 20, sex: "woman")
复制代码
代码示例:
//声明:
struct Person {
var name:String
var age:Int
func introduce(){
print("我叫:\(name),今年\(age)岁")
}
}
//调用:
var person = Person(name: "xiaoMing",age: 20)
person.introduce()
//输出:
我叫:xiaoMing,今年20岁
复制代码
不一样状况的操做:
//声明方式1:直接给成员变量赋值
struct myStruct1 {
var num1 = 100
var num2 = 200
var num3 = 300
}
//声明方式2:成员变量经过初始化参数进行赋值
struct myStruct2 {
var num1: Int
var num2: Int
var num3: Int
init(mark: Int) {
self.num1 = mark
self.num2 = mark * 2
self.num3 = mark * 3
}
}
复制代码
调用:
let stu1 = myStruct1()
print(stu1.num1,stu1.num2,stu1.num3)
let stu2 = myStruct2(mark: 500)
print(stu2.num1,stu2.num2,stu2.num3)
//值拷贝
var stu3 = stu2
print("修改前: \(stu3.num1)")
stu3.num1 = 600
print("修改后: \(stu3.num1)")
复制代码
打印:
100 200 300
500 1000 1500
修改前: 500
修改后: 600
复制代码
class
: swift中用class
关键字定义类,经过.(点语法)
进行访问类的属性和方法
定义:
class Person {
var name = "Zhangsan"
var age = 10
func say(){
print("\(name)说话了")
}
}
//调用
var p1 = Person()
p1.say()
复制代码
注意:类默认没有自动实现构造函数,若是声明成员变量的时候没有赋值,就须要实现构造函数来进行赋值,不然没法编译
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
//调用
var p1 = Person(name: "zhangsan", age: 10)
复制代码
struct
和 class
比较struct是结构体,class是类
代码示例:
struct myStru {
var width = 200
}
class myClass {
var width = 200
}
//调用
var stu = myStru()
var stu2 = stu
stu2.width = 300
print(stu.width,stu2.width)
//200 300
var cls = myClass()
var cls2 = cls
cls2.width = 300
print(cls.width,cls2.width)
//300 300
复制代码
二、struct不能被继承,class能够被继承
三、用let修饰class对象,可以修改类的值;若要修改struct的值,要用var来修饰
四、struct是放在栈上,class是放在堆上,所以struct的访问速度更快
五、struct里面若是想声明一个func来修改声明的属性,须要添加关键字mutating,才能编译成功;而class不须要
六、全部的struct都有一个自动生成的成员构造器,而class须要本身生成
七、在struct中,成员变量能够没有初始值;但在class中,若是成员变量没有初始值,就必须为它写一个构造函数