美文网首页
394,Swift中的枚举中的计算属性和方法(面试点:方法可以写

394,Swift中的枚举中的计算属性和方法(面试点:方法可以写

作者: 枫叶1234 | 来源:发表于2020-12-31 08:37 被阅读0次

    方法和属性(Methods and properties)

    你也可以在enum中像这样定义方法:

    enum Wearable {
        enum Weight: Int {
            case Light = 1
        }
        enum Armor: Int {
            case Light = 2
        }
        case Helmet(weight: Weight, armor: Armor)
            func attributes() -> (weight: Int, armor: Int) {
           switch self {
                 case .Helmet(let w, let a): return (weight: w.rawValue * 2, armor: w.rawValue * 4)
           }
        }
    }
    let woodenHelmetProps = Wearable.Helmet(weight: .Light, armor: .Light).attributes()
    print (woodenHelmetProps)
    // prints "(2, 4)"
    
    

    枚举中的方法为每一个enum case而“生”。所以倘若想要在特定情况执行特定代码的话,你需要分支处理或采用switch语句来明确正确的代码路径。

    enum Device { 
        case iPad, iPhone, AppleTV, AppleWatch 
        func introduced() -> String {
           switch self {
             case AppleTV: return "\(self) was introduced 2006"
             case iPhone: return "\(self) was introduced 2007"
             case iPad: return "\(self) was introduced 2010"
             case AppleWatch: return "\(self) was introduced 2014"
           }
        }
    }
    print (Device.iPhone.introduced())
    // prints: "iPhone was introduced 2007"
    
    

    属性(Properties)

    尽管增加一个存储属性到枚举中不被允许,但你依然能够创建计算属性。当然,计算属性的内容都是建立在枚举值下或者枚举关联值得到的。

    enum Device {
      case iPad, iPhone
      var year: Int {
        switch self {
            case iPhone: return 2007
            case iPad: return 2010
         }
      }
    }
    
    

    静态方法(Static Methods)

    你也能够为枚举创建一些静态方法(static methods)。换言之通过一个非枚举类型来创建一个枚举。在这个示例中,我们需要考虑用户有时将苹果设备叫错的情况(比如AppleWatch叫成iWatch),需要返回一个合适的名称。

    enum Device { 
        case AppleWatch 
        static func fromSlang(term: String) -> Device? {
          if term == "iWatch" {
          return .AppleWatch
          }
          return nil
        }
    }
    print (Device.fromSlang("iWatch"))
    
    

    可变方法(Mutating Methods)

    方法可以声明为mutating。这样就允许改变隐藏参数selfcase值了

    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 现在等于.On
    ovenLight.next()
    // ovenLight 现在等于.Off
    
    

    相关文章

      网友评论

          本文标题:394,Swift中的枚举中的计算属性和方法(面试点:方法可以写

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