Accessor仅在Swift 1.22.0 Release版本中提供了错误的值

Accessor仅在Swift 1.22.0 Release版本中提供了错误的值,第1张

概述我在我的代码中发现了一个非常奇怪的错误,它只发生在Release版本中.对我来说它看起来像一个Swift bug,但让我知道你的想法. import Foundationenum Level : Int { case Bad = 0, Normal = 1, Good = 2, Superb = 3}struct Attribut 我在我的代码中发现了一个非常奇怪的错误,它只发生在Release版本中.对我来说它看起来像一个Swift BUG,但让我知道你的想法.
import Foundationenum Level : Int {    case    Bad     = 0,normal  = 1,Good    = 2,Superb  = 3}struct Attribute : Printable {    var x : Level = .normal    var y : Level = .normal    var z : Level = .normal    var w : Level = .normal    var description : String {        return "(\(x.rawValue),\(y.rawValue),\(z.rawValue),\(w.rawValue))"    }    func toString() -> String {        return description    }}var AccessorBUGTestSingleton : AccessorBUGTest!class AccessorBUGTest {    let index       : Int    var attributes  : [Attribute] = []    var todaysAttributes : Attribute {        get {            let r = attributes[index]            println("today: \(r)")            return r        }    }    var initialText : String = ""    // selection for key    var states  : [String:Int] = ["x": 0,"y": 0,"z": 0,"w": 0]    var descriptions  : [String:Int] = ["a": 0,"b": 0,"c": 0,"d": 0]    init() {        index = 10        for i in 1...31 {            var att = Attribute(x: .Superb,y: .Superb,z: .Superb,w: .Superb)            attributes.append(att)        }        let attribs = todaysAttributes        initialText = "\(attribs)"        println("init: \(attribs),\(self.attributes[index])")    }}

实例化AccessorBUGTest时,应该打印

init: (3,3,3),(3,3)

但在Release版本中打印,

init: (3,0),3)

如果我删除未使用的属性状态和描述,那么问题是固定的,不知道为什么.此外,如果我使用x,y,z,w而不是枚举,那么它再次正常工作.

知道发生了什么事吗?

我已将程序上传到:https://github.com/endavid/AccessorBugTest
它包含一个测试用例,如果你在Release配置中运行它将失败(转到Program – > Scheme – > Edit Scheme,并将Test更改为Release而不是DeBUG).

我还下载了Xcode 7.1 beta,在Swift 2.0中试过,问题仍然存在:(

我觉得你发现了一个BUG.一个非常有趣的BUG.

我有一个解决方法:使Attribute成为一个类而不是一个结构.它仍然是一个值类,因此开销很低.您必须为它提供一个初始化程序,它执行struct memberwise初始化程序所执行的 *** 作.当你这样做时,你会发现整个问题都消失了.

编辑:我想到了一个更好的解决方法:不要将属性设为类,而是将Level设为@objc枚举.

编辑:OP报告此错误在Swift 2.1中得到修复.

总结

以上是内存溢出为你收集整理的Accessor仅在Swift 1.2 / 2.0 Release版本中提供了错误的值全部内容,希望文章能够帮你解决Accessor仅在Swift 1.2 / 2.0 Release版本中提供了错误的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存