У меня есть проект Swift 2 в XCode 7.3, где я использую две разные сторонние структуры.Объявление о нарушении подпроцесса, связанное с расширением, в Swift
'FrameworkA' объявляет публичное UIView
расширения объявляющего cornerRadius
свойства как это:
extension UIView {
var cornerRadius: CGFloat {
get { return self.layer.cornerRadius }
set(cornerRadius) {
self.layer.masksToBounds = true
self.layer.cornerRadius = cornerRadius
}
}
}
'FrameworkB' Объявляет UIView
подкласса с cornerRadius
собственности:
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
Это терпит неудачу с ошибкой:
Ambiguous use of 'cornerRadius'
Я могу назвать «» FrameworkA расширения свойств типа литье до UIView
, но я не могу назвать свойство класса FrameworkB, даже если я не импортирую 'FrameworkA' в этот файл. Как только я импортирую «FrameworkA» где-то в проект, он начинает сбой.
Есть ли способ явно указать компилятору использовать метод «FrameworkB» или не импортировать «FrameworkA» в файл Swift?
Edit: Чтобы воспроизвести его можно использовать Wakup
и TagListView
стручки (FrameworkA и FrameworkB соответственно) и попытаться выполнить код, приведенный выше.
Что произойдет, если вы используете '(tagView в TagView) .cornerRadius = 10' или' (tagView в TagListView.TagView) .cornerRadius = 10' –
@LukeVanIn же ошибка. Я не думаю, что это имеет значение, потому что 'tagView' уже является« TagView ». – redent84