swift2 方法
来源:互联网 发布:淘宝上怎么手机发货 编辑:程序博客网 时间:2024/05/27 00:44
实例方法
class Counter { var count = 0 func increment() { count++ } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 }}let counter = Counter()// 初始计数值是0counter.increment()// 计数值现在是1counter.incrementBy(5)// 计数值现在是6counter.reset()// 计数值现在是0
方法的局部参数名和外部参数名
函数参数可以同时有一个局部名称(在函数体内部使用)和一个外部名称(在调用函数时使用)。
方法参数也一样(因为方法就是函数,只是这个函数与某个类型相关联了)。但是,方法和函数的局部名称和外部名称的默认行为是不一样的。
Swift 默认仅给方法的第一个参数名称一个局部参数名称;默认同时给第二个和后续的参数名称局部参数名称和外部参数名称。
class Counter { var count: Int = 0 func incrementBy(amount: Int, numberOfTimes: Int) { count += amount * numberOfTimes }}let counter = Counter()counter.incrementBy(5, numberOfTimes: 3)// counter value is now 15
你不必为第一个参数值再定义一个外部变量名:因为从函数名incrementBy已经能很清楚地看出它的作用。
但是第二个参数,就要被一个外部参数名称所限定,以便在方法被调用时明确它的作用。
修改方法的外部参数名
有时为方法的第一个参数提供一个外部参数名称是非常有用的,尽管这不是默认的行为。
你可以自己添加一个显式的外部名称作为第一个参数的前缀来把这个局部名称当作外部名称使用。
相反,如果你不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线(_)作为该参数的显式外部名称,这样做将覆盖默认行为。
相反,如果你不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线(_)作为该参数的显式外部名称,这样做将覆盖默认行为。
self属性
self属性主要用来消除方法参数和实例属性的歧义,如果不使用self前缀,Swift 就认为两次使用的x都指的是名称为x的函数参数。
struct Point { var x = 0.0, y = 0.0 func isToTheRightOfX(x: Double) -> Bool { return self.x > x }}let somePoint = Point(x: 4.0, y: 5.0)if somePoint.isToTheRightOfX(1.0) { print("This point is to the right of the line where x == 1.0")}// 输出 "This point is to the right of the line where x == 1.0"(这个点在x等于1.0这条线的右边)
实例方法中修改值类型
结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择(mutating)这个方法,然后方法就可以从方法内部改变它的属性;
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择(mutating)这个方法,然后方法就可以从方法内部改变它的属性;
并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。
struct Point { var x = 0.0, y = 0.0 mutating func moveByX(deltaX: Double, y deltaY: Double) { x += deltaX y += deltaY }}var somePoint = Point(x: 1.0, y: 1.0)somePoint.moveByX(2.0, y: 3.0)print("The point is now at (\(somePoint.x), \(somePoint.y))")// 输出 "The point is now at (3.0, 4.0)"
Mutating方法中给self赋值
struct Point { var x = 0.0, y = 0.0 mutating func moveByX(deltaX: Double, y deltaY: Double) { self = Point(x: x + deltaX, y: y + deltaY) }}
enum TriStateSwitch { case Off, Low, High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off } }}var ovenLight = TriStateSwitch.LowovenLight.next()// ovenLight 现在等于 .HighovenLight.next()// ovenLight 现在等于 .Off
类型方法
实例方法是被类型的某个实例调用的方法。你也可以定义类型本身调用的方法,这种方法就叫做类型方法。
class SomeClass { class func someTypeMethod() { // type method implementation goes here }}SomeClass.someTypeMethod()
0 0
- swift2 方法
- Swift2-0基础_Methods(方法)
- swift2
- Swift2.0语言教程之类的方法
- swift2.0学习之类型方法(类方法)
- Swift2.0——构造方法的使用
- 《swift2.0 官方教程中文版》 第2章-11方法
- Swift2.2
- swift2.0
- swift2 optionals
- swift2 operators
- swift2 函数
- swift2 属性
- swift2 Subscripts
- swift2 继承
- swift2 扩展
- swift2 泛型
- Swift2.0后"|" cannot be applied to two operands问题解决方法
- WPF与JS 函数、回调函数调用
- hadoop常见问题
- Java通过反射机制动态设置对象属性值
- Android MaterialDesign相关全
- Java XML解析之Digester的使用
- swift2 方法
- JavaSE----基础语法(运算符)
- [amanhardikar] - Securing Home Computers v1.1
- [Java学习]使用digester 解析xml配置文件
- poj 2186 Popular Cows 【有向图求SCC +缩点】【求图中有多少个点 可以由其余所有点通过存在路径到达】
- HTTP Content-type
- javaAPI(字符流,转换流)
- [amanhardikar] - Cryptography v1.1
- Digester 详解