1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。
十二、方法&下标脚本
一、方法
类、结构体、枚举都可以定义实例方法和类型方法。类型方法与OC中的类方法相似
1、实例方法
class Counter {
var count = 0
func increment() {
++count
// self.count++
}
func incrementBy(amount:Int) {
count += amount
}
func reset() {
count = 0
}
}
1.1、介词
类似OC,Swift常常使用with,for,by等介词指向方法的第一个参数
1.2、外部参数名称
方法的外部参数名称等的操作见链接文章:指定外部参数名文章链接
1.3、self属性
func increment() {
++count
// self.count++
}
a、++count
可以写成self.count++
,self
是实例的隐含属性,等同于实例本身
c、使用场景:当某个参数名称和实例的某个属性名称相同时,参数名称可以不用self,属性要self加以区分
1.4、实例方法修改值类型
a、结构体和枚举是值类型,一般值类型的属性在实例中不能被修改,但是可使用变异(mutating)
关键字实现在方法内部修改,并且修改结果会保留在原始结构中~
b、方法还能给其隐含的self属性赋值一个全新的实例,这个新实例在方法结束后替换原来的实例
struct testStruct {
var x = 0.0
mutating func changeXMutating() {
x++
}
mutating func changeStructMutating() {
self = testStruct(x: ++x)
// 创建一个新的结构,最终结果跟前一个方法相同
}
}
var testVar = testStruct(x: 1)
print("x = \(testVar.x)")
testVar.changeXMutating()
print("x = \(testVar.x)")
testVar.changeStructMutating()
print("x = \(testVar.x)")
Output:
x = 1.0
x = 2.0
x = 3.0
2、类型方法
a、区别于OC,Swift中可以为所有的类、结构体和枚举定义类型方法,每个类型方法都被他所支持的类型显式包含
b、结构体和枚举前加static关键字
d、类方法中self指向类型本身
struct TestStruct {
static var x = 0.0 //static 表示类型属性
func changeX() {
TestStruct.x++
}
static func showX() {
print(self.x) //self.x,x必须为类型属性
}
}
var testVar = TestStruct()
TestStruct.showX()
testVar.changeX()
TestStruct.showX()
Output:
0.0 1.0
二、下标脚本
1、下标脚本语法和使用
a、下标脚本在数组和字典中经常用。此处将定义在类、结构体和枚举中
b、语法类似计算属性的getter和setter,显式声明入参(一个或多个)和返回类型
c、以getter和setter的实现与否,来实现只读或者读写
1.1、基本语法
subscript(index:Int) -> Int {
get {
//返回匹配值
}
set(newValue) {
//赋值操作,newValue可省略
}
}
1.2、用法实例
struct TestStruct {
//只使用只读下标,读写同理可实现
subscript(index:Int) -> Int {
return index*2
}
}
let test = TestStruct()
print("test:\(test[5])")
Output:
test:10
1.3、用法注意点
集合类中的使用就不展开讲了
注意点:Swift中字典的附属脚本实现,get部分方绘制是Int?,可选类型,对于没有设置过索引的访问结果是nil
2、下标脚本选项
a、传入参数索引可以是多个,返回值可是任意类型
b、可以使用变量参数,可变参数,但不允许用in-out
参数或给参数设置默认值
c、下标脚本的重载:一个类或结构体可根据自身需要提供多个下标脚本实现,通过入参类型进行区分,使用时自动匹配合适的下标脚本实现运行