- 实例方法
- 静态方法
实例方法
实例方法与实例属性类似,都隶属于枚举、结构体或类的个体(即实例),我们通过实例化这些类型创建实例,使用实例调用的方法。
class Account {
var amount: Double = 10_000.00 //账户金额
var owner: String = "Tony" //账户名
//计算利息
func interestWithRate(rate: Double) -> Double {
return rate * amount
}
}
var myAccount = Account()
//调用实例方法
print(myAccount.interestWithRate(rate: 0.088))
结构体和枚举方法变异
结构体和枚举中的方法默认情况下是不能修改值类型变量属性的。
class Employee {
var no: Int = 0
var name: String = ""
var job: String?
var salary: Double = 0
var dept: Department?
}
struct Department {
var no: Int = 0
var name: String = ""
var employees: [Employee] = [Employee]()
mutating func insertWithObject(anObject: AnyObject, index: Int)->() {
let emp = anObject as! Employee
employees.insert(emp, at: index)
}
}
var dept = Department()
var emp1 = Employee()
dept.insertWithObject(anObject: emp1, index: 0)
var emp2 = Employee()
dept.insertWithObject(anObject: emp2, index: 0)
注:在结构体 Department中的insertWithObject方法中不能修改值类型employees属性。加入关键字mutating,使用insertWithObject方法成为一个变异的方法,insertWithObject方法就可以修改结构体的属性employees。
如下图,类 Department中的insertWithObject方法可以修改它的属性employees。
class Department {
var no: Int = 0
var name: String = ""
var employees: [Employee] = [Employee]()
func insertWithObject(anObject: AnyObject, index: Int)->() {
let emp = anObject as! Employee
employees.insert(emp, at: index)
}
}
注意:结构体和枚举属于值类型,而类属于引用数据类型,引用数据类型实际上指向的是一个对象的内存地址,这个对象的内存地址不可以修改,但对象的内容是可以被修改的,但值类型是不允许修改它里面的内容的。
静态方法
结构体中的静态方法
//结构体中的静态方法
struct Account2 {
var owner: String = "Tony"
static var interestRate: Double = 0.0668
static func interestBy(amount: Double) -> Double {
return interestRate * amount
}
func messageWith(amount: Double) -> String {
let interest = Account2.interestBy(amount: amount)
return "\(self.owner)的利息是\(interest)"
}
}
//调用静态方法
print(Account2.interestBy(amount: 10_000.00))
var myAccount2 = Account2()
//调用实例方法
print(myAccount2.messageWith(amount: 10_000.00))
枚举中的静态方法
//枚举中的静态方法
enum Account3 {
case 中国银行
case 中国工商银行
case 中国建设银行
case 中国农业银行
static var interestRate: Double = 0.0668
static func interestBy(amount: Double) -> Double {
return interestRate * amount
}
}
//调用静态方法
print(Account3.interestBy(amount: 10_000.00))
类的静态方法
类静态方法使用的关键字是class或static,如果使用static定义,则该方法不能在子类中被重写(override);如果使用class定义,则该方法可以被子类重写。
class Account4 {
var owner: String = "Tony"
//可以换成static
class func interestBy(amount: Double) -> Double {
return 0.0668 * amount
}
}
class A: Account4 {
override static func interestBy(amount: Double) -> Double {
return 0.0668 * amount
}
}
class B: A {
//因为类B的父类A 中的interestBy方法使用static定义,所以类B中不能重写interestBy方法
}
//调用静态方法
print(Account4.interestBy(amount: 10_000.00))
注意:
静态方法不能访问实例方法和实例属性,但是能访问其他的静态方法和静态属性。
实例方法可以访问静态方法。
网友评论