Can Swift Method Defined on Extensions on Protocols Accessed in Objective-c

前端 未结 3 1757
走了就别回头了
走了就别回头了 2021-01-03 21:57

Is it possible to call methods defined in a protocol extension in Swift from Objective-C?

For example:

protocol Product {
    var price:Int { get }
          


        
3条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-03 22:13

    I am nearly certain the answer to this is "no", although I haven't found official Apple documentation that spells it out.

    Here is a message from the swift-evolution mailing list discussing the proposal to use dynamic dispatch for all method calls, which would provide calling semantics more like Objective-C:

    Again, the sole exception to this is protocol extensions. Unlike any other construct in the language, protocol extension methods are dispatched statically in a situation where a virtual dispatch would cause different results. No compiler error prevents this mismatch. (https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/001707.html)

    Protocol extensions are a Swift-only language feature, and as such are not visible to objc_msgSend().

提交回复
热议问题