相关疑难解决方法(0)

覆盖Swift扩展中的方法

我倾向于只将必需品(存储属性,初始化器)放入我的类定义中,并将其他所有内容移动到自己的extension类中,有点像extension我将与之合并的每个逻辑块// MARK:.

例如,对于UIView子类,我最终会得到与布局相关的东西的扩展,一个用于订阅和处理事件等等.在这些扩展中,我不可避免地必须覆盖一些UIKit方法,例如layoutSubviews.我从未注意到这种方法有任何问题 - 直到今天.

以此类层次结构为例:

public class C: NSObject {
    public func method() { print("C") }
}

public class B: C {
}
extension B {
    override public func method() { print("B") }
}

public class A: B {
}
extension A {
    override public func method() { print("A") }
}

(A() as A).method()
(A() as B).method()
(A() as C).method()
Run Code Online (Sandbox Code Playgroud)

输出是A B C.这对我来说没什么意义.我读到有关静态分派的协议扩展,但这不是协议.这是一个常规类,我希望在运行时动态调度方法调用.显然,呼叫C至少应该动态调度和产生C

如果我删除继承NSObject …

swift swift-extensions swift2

119
推荐指数
4
解决办法
6万
查看次数

不支持从扩展覆盖非@objc声明

似乎无处不在,我开始遇到与我经常使用的两个扩展功能相关的数百个错误。

我尝试注释掉出现此错误之前的所有新代码。我还尝试清洁构建文件夹。我如何才能克服这篇文章标题中发现的错误?当我成功使用这些扩展包几个月后,为什么会随机出现?

extension UITableViewCell {

public func getSize(large: CGFloat, medium: CGFloat, small: CGFloat) -> CGFloat {
    var size = CGFloat()
    let screenHeight = Int(UIScreen.main.bounds.height)
    if screenHeight >= 800 {
        size = large
    } else if screenHeight >= 600 {
        size = medium
    } else {
        size = small
    }
    return size
}

public func formatPrice(_ price: Int) -> String {
    let lastDigit = price % 10
    var stringPrice = ""
    if lastDigit == 0 {
        stringPrice = "$\(Double(price) / 100)0" …
Run Code Online (Sandbox Code Playgroud)

ios swift

8
推荐指数
1
解决办法
4381
查看次数

标签 统计

swift ×2

ios ×1

swift-extensions ×1

swift2 ×1