【问题标题】:I want to use switch in extension我想在扩展中使用 switch
【发布时间】:2018-09-17 20:10:57
【问题描述】:
protocol Sound { func makeSound() }

extension Sound {  
   func makeSound() { 
     print("Wow") 
   } 
}

protocol Flyable {
   func fly()
}

extension Flyable { 
    func fly() {
        print("✈️") 
    }
}

class Airplane: Flyable { }

class Pigeon: Sound, Flyable { }

class Penguin: Sound { }

let pigeon = Pigeon()
pigeon.fly()  // prints ✈️
pigeon.makeSound() // prints Wow

上面的代码工作正常,但是我需要打印不同类型的声音(IE)。如果我打电话给 plane.fly() 它应该打印我 ("something different") 。企鹅也一样

【问题讨论】:

  • 这里的缩进有点不规则。请记住,这不仅可以帮助我们理解您的代码的含义,还可以帮助我们理解您的意图,因为有时错误归结为忘记添加一些语法。请在发帖前花点时间清理一下。
  • 那么“我想使用 switch”是什么意思。你的意思是switch语句?这与您的问题有何关系?

标签: swift


【解决方案1】:

为飞机类提供fly()

class Airplane: Flyable {
    func fly() {
        print("something different")
    }
}

let airBus: Airplane = Airplane()
airBus.fly()
//prints "something different"

你可以对 Penguin 类做同样的事情:

class Penguin: Sound {
    func makeSound() {
        print("squawk")
    }
}

let ? = Penguin()
?.makeSound()
//prints "squawk"

您提供的功能是协议的默认实现。如果一个类型没有覆盖函数,它将采用默认实现。您可以在docs 中找到更多信息:

您可以使用协议扩展为该协议的任何方法或计算属性要求提供默认实现。如果符合标准的类型提供了它自己的所需方法或属性的实现,则将使用该实现而不是扩展提供的实现。

【讨论】:

  • @subhashchandru 很高兴我能帮上忙!
猜你喜欢
  • 2021-08-15
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2021-12-13
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多