swift5(11)方法
2020-02-27 本文已影响0人
C_G__
感谢作者
https://www.jianshu.com/p/40d2b3f819b7
// 方法,用于封装业务逻辑
// 实例方法
// 类,枚举,结构实例的方法
// self属性
// 每个实例都有一个self的隐式属性
// 实例方法中修改值类型
// 结构和枚举是值类型。无法在其实例方法中修改属性值。
// 使用mutating关键字修饰方法后,属性值可修改。
var somePoint = Point2(x: 1.0, y: 1.0);
somePoint.moveBy(x: 2.0, y: 3.0);
print("当前点: (\(somePoint.x), \(somePoint.y))");
//!< 当前点: (3.0, 4.0)"
//使用
let sizeType = SizeType.allCases;
for var item in sizeType {
print("当前的item:\(item)");
item.nextCase();
print("调用方法后:\(item)");
}
// 类方法
// 类方法:使用类型本身而不是类型的实例去调用的方法
// static 或 class 修饰 func,class修改时,允许子类重写该方法
// 类方法中的self指类型本身而非其实例
// 函数or方法的声明属性@discardableResult
// 表示该函数虽有返回值,但不使用编译器不生成警告。
class func someTypeMethod() {
//类方法的实现
}
@discardableResult
func instanceMethod() -> String {
return "返回值是一个字符串,但是调用处却不会使用,使用声明属性`@discardableResult`避免编译器的警告"
}
struct Point2 {
var x = 0.0, y = 0.0 //!< 必须变量,常量不能被修改
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
self = Point2.init(x: x + deltaX, y: y + deltaY);
// x += deltaX
// y += deltaY
}
}
enum SizeType:Int,CaseIterable {
case big,middle,small
mutating func nextCase() {
switch self {
case .big:
self = .middle
case .middle:
self = .small
case .small:
self = .big
}
}
}