首页 > 其他分享 >Swift开篇009->方法

Swift开篇009->方法

时间:2023-02-01 12:34:21浏览次数:51  
标签:开篇 Swift self 枚举 实例 func var 009 方法


PART_A 实例方法

  1. 简介
  • 实例方法:可属于某个特定类、结构体或枚举实例的方法
  • 实例方法能隐式访问它所属类型的所有其他实例方法和属性
  • 实例方法只能被它所属的类的某个特定实例调用
  • 调用方式:对象.实例方法
  1. 方法的局部参数名称和外部参数名称、及修改
  • 默认第一个为局部参数名称,后续为局部和外部参数名称
  • 可为第一个添加显式的外部名称,为后续添加外部名称 _,覆盖默认行为
// 定义方法
func add(a: Int, b: Int) { ... }

// 方法调用
.add(3, b: 8)
// 定义方法
func add(numPre a: Int, _ b: Int) { ... }

// 方法调用
.add(numPre: 3, 8)
  1. self 属性
  • 适用场景:实例方法的某个参数名称与实例的某个属性名称相同时(参考 Java)
  1. 在实例方法中修改值类型
  • 需在特定的方法中修改结构体或枚举的属性,可为该方法选择可变(mutating)行为. 当该方法做出改变后结果会写回到原始结构中
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))")
// (3.0, 4.0)
  1. 在可变方法中给 self 赋值
  1. 上面可简写
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)
}
}
  1. 枚举的可变方法可将 self 设置为同一枚举类型中的不同成员
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.Low
ovenLight.next()
// ovenLight 值为 High
ovenLight.next()
// ovenLight 值为 Off

PART_B 类型方法

  1. 类型方法:可属于类、结构体或枚举类型的方法
  2. 定义方式:static
  3. 调用方式:类名.方法名​类名.属性名​
class SomeClass {
// 类型属性
static var someProperty

// 类型方法
static func someTypeMethod() {
// Method Body
}
}

// 类型属性访问
SomeClass.someProperty

// 类型方法调用
SomeClass.someTypeMethod()


标签:开篇,Swift,self,枚举,实例,func,var,009,方法
From: https://blog.51cto.com/u_15950249/6031345

相关文章

  • Swift开篇004->集合
    PART_O集合简介集合长度默认可变,若分配成常量,则其大小和内容皆不可变Swift集合类型(必须通过泛型明确存储值)​​Arrays​​:数组,有序可重复​​Sets​​:集合,无序不重复​​......
  • Swift开篇005->闭包
    PART_A背景闭包的概念:自包含的函数代码块,可以在代码中被传递和使用.用简洁语法构建内联闭包闭包的三种形式全局函数是一个有名字但不会捕获任何值的闭包嵌套函数是一个有......
  • Swift开篇003->控制流、函数
    PART_A控制流​​for​​​​for...in​​forindexin1...5{print(index)}letnames=["cat","dog","fish"]fornameinnames{print(name)}letnums=......
  • Swift开篇001->新建Swift工程
    最近看了点​​Swift的教程​​,在此做个笔记,那就从Xcode新建一个Swift工程开始吧​​File->New->Project​​​​OSX->Application->CommandLineTool​​​​填......
  • Swift开篇002->基本运算符
    PART_A运算符赋值运算符:​​=​​普通赋值varnumnum=5元组赋值let(x,y)=(0,0)​​=​​操作不返回任何值算数、组合赋值、自增自减、、负号、字符串拼接求余时符号......
  • Aforge.net之旅——开篇:从识别验证码开始
    时间过得真快啊,转眼今年就要过去了,大半年都没有写博客了,要说时间嘛,花在泡妹子和搞英语去了,哈哈。。。前几天老大问我怎么这么长时间都没写博客了,好吧,继续坚持,继续分享......
  • [AHOI2009] 中国象棋 题解
    每行每列的炮数量\(\leq2\),那么整个图就可以被分解为一些环和链。考虑答案的二元生成函数,显然环和链分别的生成函数都是平凡的多项式,而答案的多项式无非是加起来后求exp......
  • docker(开篇)
    Docker概念:是基于Go语言实现的云开源项目。Docker的主要目标是“Buid,ShipandRunAnyAppAnywhere”;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,......
  • 这是一个开篇
    设想一个自动驾驶系统,有次在路上发生了追尾,撞坏了前车,事后它的教练向它提出一连串问题,诸如:你是否认为自己犯了个错误?说说当时发生了什么?你当时是怎么想的?为什么没有及时踩......
  • P2657 [SCOI2009] windy 数 数位DP好题
    P2657[SCOI2009]windy数-洛谷|计算机科学教育新生态(luogu.com.cn)数位DP好题主要问题是:不含前导零且相邻两个数字之差至少为 2solution:现在枚举到了第i位......