微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift(十二、方法&下标脚本)

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是实例的隐含属性,等同于实例本身

b、不必经常写,Swift会假定你指向当前实例的属性方法

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关键字

c、类用class关键字允许子类重写父类方法

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、下标脚本的重载一个类或结构体可根据自身需要提供多个下标脚本实现,通过入参类型进行区分,使用时自动匹配合适的下标脚本实现运行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐