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

前端之家收集整理的这篇文章主要介绍了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、下标脚本的重载:一个类或结构体可根据自身需要提供多个下标脚本实现,通过入参类型进行区分,使用时自动匹配合适的下标脚本实现运行

原文链接:https://www.f2er.com/swift/325486.html

猜你在找的Swift相关文章