gpt4 book ai didi

swift - 基于类型声明的协议(protocol)实现行为的差异

转载 作者:行者123 更新时间:2023-11-30 12:50:07 26 4
gpt4 key购买 nike

根据类型是显式声明还是推断,以下代码会给出不同的输出。

  1. 为什么会这样。如果我声明了类型,为什么不能在我的类中实现 myFloat?
  2. 如果我想显式声明类型,但又想重写扩展中的实现,以便对 testClass1.myFloat() 的调用返回 2.7,我需要做什么?

使用 Xcode 8.1、Swift 2.3

import UIKit

protocol TestSource {
func myFloat() -> Float
}

extension TestSource {
func myFloat() -> Float {
return 2.5
}
}

protocol TestProtocol: TestSource {

}

class DevClass: TestProtocol {

}

class TestClass: DevClass {
func myFloat() -> Float {
return 2.7
}
}



let testClass1: TestProtocol = TestClass()
testClass1.myFloat() // Returns 2.5

let testClass2 = TestClass()
testClass2.myFloat() // Returns 2.7

最佳答案

这不是一个错误。简而言之,协议(protocol)扩展不引入动态调度。有关更全面的解释,请参阅this answer 。那里的解释非常详尽,并包含一个示例。

这是一篇更深入的博文:https://nomothetis.svbtle.com/the-ghost-of-swift-bugs-future

关于swift - 基于类型声明的协议(protocol)实现行为的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com