Swift 学习笔记---Methods
来源:互联网 发布:c语言冒泡排序简单代码 编辑:程序博客网 时间:2024/05/22 11:48
方法是与特定类型联系的函数。Classes、structures和enumerations能够定义实例方法也能够定义类方法。
一实例方法
实例方法是属于Classes、structures和enumerations实例的方法,它的定义和函数一样。class Counter {var count = 0func increment() { count += 1}func increment(by amount: Int) { count += amount}func reset() { count = 0}}let counter = Counter()// the initial counter value is 0counter.increment()// the counter's value is now 1counter.increment(by: 5)// the counter's value is now 6counter.reset()// the counter's value is now 0
The self Property
每一个实例都有一个隐含的属性self,这个 self 指向这个对象本身。 func increment() {self.count += 1}我们可以不写 self,Swift 默认的调用这个实例对象里的方法和属性。
从实例方法内部修该属性值
Structures 和 enumerations是值类型,在默认情况下他们的实例方法不能改变属性值。但是如果你需要在实例方法内部改变属性值,你需要在方法前面加上 mutating关键字。我们甚至可以改变 self 属性,使它变成另外一个实例对象,此时的这个实例的属性无法改变。 struct Point {var x:Intvar y:Intmutating func change(point:Point){ self = point;}}var point1 = Point(x: 1, y: 1)print("\(point1.x) \(point1.y)")//1 1var point2 = Point(x: 6, y: 6);print("\(point2.x) \(point2.y)")//6 6point1.change(point2)print("\(point1.x) \(point1.y)")//6 6point2.x = 10point2.y = 5print("\(point2.x) \(point2.y)")//10 5print("\(point1.x) \(point1.y)")//6 6point1.x = 3point1.y = 3print("\(point1.x) \(point1.y)")注意:改变 self 属性时,发生了深拷贝。此时 point1和 point2不是同一个对象
二类型方法
我们可以定义类型方法通过 static 关键字,类型方法属于一个类型。Classes也可以用 class 关键字来容许子类覆盖父类的类型方法。在 OC 中只有 classes 可以定义类型水平的方法,但是在 Swift 中classes, structures, and enumerations都可以定义类型方法。class SomeClass {class func someTypeMethod() { // type method implementation goes here}}SomeClass.someTypeMethod()注意在类型方法里的 self引用的是类型本身。在一个类型方法内部访问其他类型方法和类型属性可以不加类型名struct LevelTracker {static var highestUnlockedLevel = 1var currentLevel = 1static func unlock(_ level: Int) { if level > highestUnlockedLevel { highestUnlockedLevel = level }}static func isUnlocked(_ level: Int) -> Bool { return level <= highestUnlockedLevel}@discardableResultmutating func advance(to level: Int) -> Bool { if LevelTracker.isUnlocked(level) { currentLevel = level return true } else { return false }}}
0 0
- Swift 学习笔记---Methods
- 学习Swift笔记 (十二)Swift方法(Methods)的使用
- 对照Java学习Swift--方法(Methods)
- Swift 易忽略的笔记 6):Methods & Subscripts
- Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)
- ruby学习笔记(三)--ruby methods
- Java学习笔记(6)Methods
- vue2.0学习笔记 ——methods
- Swift方法(Methods)
- Swift 方法(Methods)
- swift methods scraps
- Swift学习笔记--关于Swift
- Swift学习笔记--Swift入门
- OpenStack Swift学习笔记
- Swift学习笔记-1
- Swift学习笔记
- Swift学习笔记
- SWIFT学习笔记01
- LCD12864串行和并行显示
- 线程简单地存钱--取钱操作
- Android程序开发——5.0新特性 RecycleView替换ListView
- python scrapy 爬博客信息
- hdu 5898 odd-even number (数位dp)
- Swift 学习笔记---Methods
- UISwitch
- Android M 启动源码分析笔记之 - Init 进程
- 2016CCPC东北地区大学生程序设计竞赛-Mr. Frog’s Game
- Burp 1.6 无法抓取HTTPS解决办法
- 1003-Max Sum
- MD5 工具类
- 【codevs 3012】线段覆盖 4
- android studio 获取 SHA1与MD5