Swift:從自定義實(shí)現(xiàn)調(diào)用協(xié)議func的默認(rèn)實(shí)現(xiàn)

我認(rèn)為題目和例子說(shuō)明了一切:)這有可能嗎?

protocol Foo {
  func bar()
}

extension Foo {
  func bar() {
     print("bar form extension")
  }
}

enum Day: Foo {
  case sunday, monday

  func bar() {
    switch self {
       case .sunday: print("bar custom implementation")
       case .monday: // I want to call the default implementation
    }
  }
}
? 最佳回答:

只需從協(xié)議中刪除聲明,并只保留擴(kuò)展定義。然后,如果具體類(lèi)型沒(méi)有重寫(xiě),或者除了符合Foo之外對(duì)具體類(lèi)型一無(wú)所知,編譯器將只使用extension方法

protocol Foo {
   // Declaration was deleted
}

extension Foo {
  func bar() {
     print("bar form extension")
  }
}

enum Day: Foo {
  case sunday, monday

  func bar() {
    switch self {
       case .sunday: print("bar custom implementation")
       case .monday: (self as Foo).bar()
    }
  }
}

Day.sunday.bar() // prints "bar custom implementation"
Day.monday.bar() // prints "bar form extension"

您需要(self as Foo)使編譯器忘記self是一個(gè)Day,并使用Foo擴(kuò)展函數(shù)。

主站蜘蛛池模板: 亚洲国产成人久久一区二区三区| 国产一区二区三区无码免费| 亚洲国产欧美一区二区三区| 午夜AV内射一区二区三区红桃视| 国产福利91精品一区二区| 亚洲国产一区二区三区青草影视 | 一区二区和激情视频| 日本精品无码一区二区三区久久久| 日本一区二区三区免费高清| 精品在线一区二区| 国产天堂一区二区综合| 精品人无码一区二区三区| 精品国产免费一区二区| 国产午夜精品一区二区三区小说| 无码人妻精品一区二区在线视频| 亚洲电影国产一区| 免费一区二区三区四区五区| 国产探花在线精品一区二区| 国产主播在线一区| 国产精品亚洲不卡一区二区三区| 久久人做人爽一区二区三区| 国产人妖视频一区在线观看| 亚洲成AV人片一区二区密柚| 国产精品熟女视频一区二区| 日韩AV无码一区二区三区不卡毛片 | 日本精品一区二区三本中文| 国产成人无码精品一区在线观看| 日韩人妻精品无码一区二区三区| 另类国产精品一区二区| 丰满爆乳一区二区三区| 精品国产一区二区麻豆| 亚洲一区精品中文字幕| 无码日韩精品一区二区人妻| 亚洲一区二区三区免费观看| 久久精品国产一区二区三区| 精品人妻无码一区二区色欲产成人| 中文字幕一区二区视频| 影院成人区精品一区二区婷婷丽春院影视 | 奇米精品一区二区三区在| 国产一区二区三区乱码在线观看| 国产一区二区免费|