私は2つの異なる第三者フレームワークを使用するXCode 7.3でSwift 2プロジェクトを持っています。Swiftの拡張プロパティ競合サブクラス宣言
'FrameworkA' は、このようcornerRadius
プロパティを宣言公共UIView
拡張を宣言します。
extension UIView {
var cornerRadius: CGFloat {
get { return self.layer.cornerRadius }
set(cornerRadius) {
self.layer.masksToBounds = true
self.layer.cornerRadius = cornerRadius
}
}
}
'FrameworkB' cornerRadius
プロパティを持つUIView
サブクラス宣言しています。
class TagView: UIView {
var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
}
どちらのフレームワークはのように完全に罰金コンパイルを彼らはお互いを知りません。しかし、私のコードで「FrameworkB」プロパティを使用しようとすると:
それはエラーで失敗しlet view = UIView()
view.cornerRadius = 10 // FrameworkA: Ok
let tagView = TagView(title: "")
tagView.cornerRadius = 10 // Compilation error
(tagView as UIView).cornerRadius = 10 // FrameworkA: Ok
:私は「FrameworkA」拡張プロパティのタイプキャストを呼び出すことができるよ
Ambiguous use of 'cornerRadius'
UIView
になりますが、このファイルで 'FrameworkA'をインポートしなくても 'FrameworkB'クラスプロパティを呼び出すことができません。プロジェクトのどこかで 'FrameworkA'をインポートするとすぐに失敗します。
'FrameworkB'メソッドを使用するか、Swiftファイルで 'FrameworkA'をインポートしないようコンパイラに明示的に指示する方法はありますか?
編集:あなたが(それぞれFrameworkAとFrameworkB)Wakup
とTagListView
ポッドを使用して、上記のコードを実行しようとすることができ、それを再現します。
あなたは '(TagViewなどtagView).cornerRadius = 10 '、または'(TagListView.TagViewなどtagView).cornerRadius = 10' –
@LukeVanIn同じエラーを使用した場合はどうなります。 'tagView'はすでに' TagView'であるので、私はそれが何らかの違いをもたらすとは思わない。 – redent84