私はSwiftやObjective-Cの新機能はありませんが、今度はError
サブタイプで作業すると、それで私は少し深く掘り下げました。スウィフトの動的/ランタイム・ディスパッチ
NSString
サブクラス(NSObject
に基づいたクラスないについても同様に、はい、たとえば以下の機能)で作業する場合:
import Foundation
// Class version
class OddString : NSString {
override var description: String {
return "No way, José"
}
}
let odd = OddString()
func printIt(_ string: NSString) {
print(string.description)
}
print(odd.description)
printIt(odd)
私は私が見に期待するものを参照してください。
No way, José
No way, José
しかし、私が(と思っているのはです)、代わりに構造体(Error
)を使用した同等のコード:
import Foundation
// Struct version
struct TestError : Error {
var localizedDescription: String {
return "I am a TestError"
}
}
let explosive = TestError()
func printIt(_ error : Error) {
print(error.localizedDescription)
}
print(explosive.localizedDescription)
printIt(explosive)
私は、次を参照してください。
I am a TestError
The operation couldn’t be completed. (SanityChecks.TestError error 1.)
は、これは私には本当に混乱しています。 コンパイル時に決定するのですかprintIt
に渡された構造体でどのようなメソッドが呼び出されるのですか。どのタイプに関係なくは実際にはですか?
さらに、クラスと構造体の間のランタイム動作の違いがSwift Programming Guideに記載されています。私はまだこれについて何も見つけていない。
との比較[Swiftでエラータイプのローカライズされた説明を提供する方法](http://stackoverflow.com/questions/39176196/how-to-provide-a-localized-description-with-an-error-スイフトタイプ)。 –
関連項目:http://stackoverflow.com/questions/39007960/override-of-protocol-default-implementation-in-a-subsubclass-doesnt-participate、http://stackoverflow.com/questions/31431753/swift-プロトコル拡張のオーバーライド –