You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 14.0更新后AXStackableViewContainer属性冲突错误如何解决?

解决AXStackableViewContainer中anchorPoint属性命名冲突问题

问题原因

UIView本身自带一个类型为CGPoint的anchorPoint属性,你的自定义子类AXStackableViewContainer中,给同名的枚举类型属性添加了@objc标记,导致该属性的Setter方法setAnchorPoint:与父类UIView的同名Setter方法产生Objective-C选择器重名冲突,这就是更新Xcode后报错的核心原因。

解决方案

方案1:重命名自定义属性(推荐)

直接修改子类属性名,与父类anchorPoint区分开,同时保持代码语义清晰,这是最稳妥的解决方式:

@objc public class AXStackableViewContainer: UIView {
    weak var delegate: AXStackableViewContainerDelegate?
    
    /// The inset of the contents of the `StackableViewContainer`.
    /// For internal use only.
    var contentInset: UIEdgeInsets = .zero

    @objc fileprivate(set) var stackAnchorPoint: AXStackableViewContainerAnchorPoint
    
    @objc enum AXStackableViewContainerAnchorPoint: Int {
        case top, bottom
    }
}

后续代码中所有引用该属性的地方,同步更新为新名称即可。

方案2:移除@objc标记(仅Swift环境适用)

如果你的项目不需要在Objective-C代码中访问这个属性,可以去掉@objc标记,让属性仅在Swift环境可见:

public class AXStackableViewContainer: UIView {
    weak var delegate: AXStackableViewContainerDelegate?
    
    /// The inset of the contents of the `StackableViewContainer`.
    /// For internal use only.
    var contentInset: UIEdgeInsets = .zero

    fileprivate(set) var anchorPoint: AXStackableViewContainerAnchorPoint
    
    enum AXStackableViewContainerAnchorPoint: Int {
        case top, bottom
    }
}

注意:此方法会导致Objective-C代码无法访问该属性,若项目存在OC与Swift混编且需要调用该属性,请勿使用。

方案3:指定自定义Objective-C选择器

若必须保留属性名且需要暴露给Objective-C,可以通过@objc标记为属性指定不同的Objective-C选择器:

@objc public class AXStackableViewContainer: UIView {
    weak var delegate: AXStackableViewContainerDelegate?
    
    /// The inset of the contents of the `StackableViewContainer`.
    /// For internal use only.
    var contentInset: UIEdgeInsets = .zero

    @objc(getStackAnchorPoint)
    @objc(setStackAnchorPoint:)
    fileprivate(set) var anchorPoint: AXStackableViewContainerAnchorPoint
    
    @objc enum AXStackableViewContainerAnchorPoint: Int {
        case top, bottom
    }
}

这种方式下,Swift中仍使用anchorPoint,但Objective-C中需要通过stackAnchorPoint属性或setStackAnchorPoint:方法来访问/修改,会增加代码复杂度,仅在特殊场景下使用。

内容的提问来源于stack exchange,提问作者ChanSeul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:15:30