我有一個專案 A ,其中定義了一個結構,該結構僅存在于專案 A中,如下所示
public struct Foo: RawRepresentable {
public typealias RawValue = String
public var rawValue: RawValue
public init?(rawValue: RawValue) {
self.rawValue = rawValue
}
public static let bar = Foo(rawValue: "bar")
}
現在,當我在專案 A 中創建一個重新定義bar屬性的擴展時,這將產生一個錯誤,這是合乎邏輯的。
extension Foo {
// Invalid redeclaration of 'bar'
static let bar = Foo(rawValue: "foo")
}
當我定義一個依賴于 A 的新專案 B 時,我真正的問題來了。我在那里宣告了相同的擴展,但沒有給出編譯器錯誤。這是為什么?
import A
extension Foo {
// No error, but shouldn't it give me one?
static let bar = Foo(rawValue: "foo")
}
uj5u.com熱心網友回復:
嗯,有兩種方式來看待這個問題。一個是它是一個錯誤,另一個是它不是。:) 規范報告可能是https://bugs.swift.org/browse/SR-3228 [警告:當 Apple 轉移到 GitHub 問題以進行 Swift 錯誤報告時,該 URL 可能會變壞]。但也請閱讀 Jordan Rose 在對https://bugs.swift.org/browse/SR-8010的評論中對底層機制的討論,其中真正的問題似乎是如何保持 Objective-C 兼容性。
所以,是的,Apple 知道這一點,他們知道最好發出一個關于做一些不確定的事情的警告,但實際上你可以在不同的模塊中創建相當于同名但不同的方法/屬性的東西,所以如果你這樣做,就在你的頭上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448202.html
上一篇:識別符號為<team-id.com.example.bundle-id>的應用程式未與域<www.example-domain.com>關聯
下一篇:為什么我的函式回傳一個空陣列?
