gpt4 book ai didi

swift - `supportsSecureCoding` 使用优化速度选项时崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:54 24 4
gpt4 key购买 nike

我在创建使用 NSSecureCoding 及其子类的类时遇到问题。

class ClassA: NSObject, NSSecureCoding {
public static var supportsSecureCoding: Bool { return true }
}

class ClassB: ClassA {
public static var supportsSecureCoding: Bool { return true } // "Cannot override static var"
}

我应该调用它,因为 NSObject.h 中的文档说,

This property must return YES on all classes that allow secure coding. Subclasses of classes that adopt NSSecureCoding and override initWithCoder: must also override this method and return YES. // The Secure Coding Guide should be consulted when writing methods that decode data.

目标-C:

@property (class, readonly) BOOL supportsSecureCoding;

swift :

public static var supportsSecureCoding: Bool { get }

我正在使用 Xcode 10.0,在 Swift 4.0 和 Swift 4.2 上都试过了。人们如何解决这个问题?感谢您的帮助。

更新:使用 public class var supportsSecureCoding 时,它可以编译,但在使用 Optimize for Speed 时会在运行时崩溃。

最佳答案

当 Swift 的定义与其父类(super class)相同时,Swift 的当前优化器似乎禁止生成重写的 getter 方法。多么聪明的优化器!?

这种 hack 会抑制这种过于强大的优化。

class ClassB: ClassA {

//...

static private var secureCoding = true
override public class var supportsSecureCoding: Bool { return secureCoding }

}

static private let 没有同样的效果。所以,当 Swift 优化器更聪明时,上面的代码可能无法工作。最好尽快发送错误报告。


似乎 Swift 优化器已经足够聪明,上面的解决方法可能行不通。(参见 Martin R 的评论。)

您可能需要删除 private

class ClassB: ClassA {

//...

static var secureCoding = true
override public class var supportsSecureCoding: Bool { return secureCoding }

}

关于swift - `supportsSecureCoding` 使用优化速度选项时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52544461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com