美文网首页
Swift--方法

Swift--方法

作者: 优雅的步伐 | 来源:发表于2019-11-18 14:40 被阅读0次
  • 实例方法
  • 静态方法

实例方法

实例方法与实例属性类似,都隶属于枚举、结构体或类的个体(即实例),我们通过实例化这些类型创建实例,使用实例调用的方法。

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))

注意:

  • 静态方法不能访问实例方法和实例属性,但是能访问其他的静态方法和静态属性。
  • 实例方法可以访问静态方法。

相关文章

  • Swift--方法

    实例方法 静态方法 实例方法 实例方法与实例属性类似,都隶属于枚举、结构体或类的个体(即实例),我们通过实例化这些...

  • The Awesome Raywenderlich.com: 经

    Swift--弹性动画--Swift Swift--CALayer 教程: Getting Started超棒的源...

  • Swift--属性、方法、下标、继承

    属性 存储属性 最简单情况下,作为特定类和结构体实例一部分的常量或者变量 常量结构体实例的存储属性 不能修改常量结...

  • Swift4.0--一个好用的金融类游标卡尺

    Swift--一个好用的金融类游标卡尺 思路:使用UICollectionView制作一个游标卡尺,每一个cell...

  • swift--字典

    字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成,一个键(key)集合,一个是值(value)集...

  • swift--类

    类的属性 1.存储属性:存储常量和变量 2.计算属性:通过某种方式计算出来的属性 3.类的属性:与整个类目相关联的...

  • swift--元组

  • swift--字典

    创建字典 字典的基本操作 遍历字典 字典合并

  • swift--函数

    1.函数基本写法: swift里面的函数就相当于是oc里面的方法,以func开头 事例: func 函数名 (参数...

  • swift--元组

    一: 元组类型介绍 元组类型由 多个 任意类型的数据组成,并不要求是相同类型,组成元组类型的数据可以称为“元素”....

网友评论

      本文标题:Swift--方法

      本文链接:https://www.haomeiwen.com/subject/jiizpctx.html