0
型が明示的に宣言されているか推測されているかに基づいて、以下のコードは異なる出力を与えます。型宣言に基づくプロトコル実装の動作の違い
- なぜこのように動作しますか?なぜ型を宣言すれば、私のクラスにmyFloatを実装できないのですか?
- 型を明示的に宣言したいが、testClass1.myFloat()の呼び出しが2.7を返すように、拡張の実装をオーバーライドするにはどうすればよいですか? Xcodeの8.1で
この、スウィフト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
あなたは明示的に 'myFloat'は2.5を返します' TestProtocol'、などのタイプを宣言した。ここで
はさらに深く潜るブログ記事です。型を 'TestClass'として明示的に宣言すると、2.7が得られます。コンストラクタのクラス以外の型として宣言する全体のポイントは、クラスのスーパークラスまたはプロトコルに属する動作を取得することです。 – BallpointBenこれはコンパイラのバグです。私はここで非常によく似た質問をしています。 – Cristik