我在代码中发现了一个非常奇怪的错误,该错误仅在Release版本中发生。在我看来,这似乎是Swift的错误,但请告诉我您的想法。
import Foundation
enum 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, 3, 3, 3)
但在Release版本中可以打印,
init: (3, 0, 0, 0), (3, 3, 3, 3)
如果删除未使用的属性states
和descriptions
,则问题已解决,不知道为什么。另外,如果我做x
,y
,z
,w
int类型而不是枚举,然后重新正常工作。
知道发生了什么吗?
我已将该程序上传到:https :
//github.com/endavid/AccessorBugTest
它包含一个测试用例,如果您在Release配置中运行它,该测试用例将失败(转到Program-> Scheme-> Edit
Scheme,然后将Test更改为发布而不是调试)。
我还下载了Xcode 7.1 beta,在Swift 2.0中进行了尝试,但问题仍然存在:(
我认为您已找到一个错误。一个非常有趣的错误。
我有一个解决方法:将Attribute设为类而不是struct。它仍将是一个值类,因此开销将很低。您将不得不给它一个初始化器,该初始化器执行struct逐成员初始化器的作用。执行此操作后,您会发现整个问题都消失了。
编辑: 我想到了一个更好的解决方法:而不是使Attribute为一个类,而是使Level为@objc
枚举。
编辑: OP报告此错误已在Swift 2.1中修复。
我使用以下代码警报视图,它在iPhone中工作。但是当我在iPad中运行它时,它会出现以下错误: 由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“您的应用程序已呈现UIAlertControllerStyleActionSheet样式的UIAlertController()。具有此样式的UIAlertController的modalPresentationStyl
问题内容: 我的编码是 错误是 问题答案: NLTK中的MaltParserAPI仅有一个修补程序,该修补程序修复并稳定了其以前存在的问题: 这是如何在NLTK中使用MaltParser API的示例: (参见这里更多的演示代码或这里的比较详细的演示代码) 请注意,您还可以使用导出功能,并且可以在初始化对象时避免使用完整路径。但是您仍然必须告诉对象要查找的解析器目录的名称和模型文件名,例如
问题内容: 我正在使用IntelliJ中的Google App Engine。我正在尝试在我的JSP中使用JSTL标记。我尝试了在互联网上找到的两个不同的URI,它们都给我错误: 和 它将网址变红并表示无法解析taglib。我尝试删除URL的不同部分以查看是否- 给我任何自动完成的爱,但没有运气。 我需要做些什么才能使这项工作吗? 问题答案: 确保将JSTL库jar添加到模块依赖项中。
错误:任务“:app:CompileFlutterBuildDebug”执行失败。 进程“command”d:\flutter\bin\flutter.bat“已完成,退出值为非零%1 > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。
我使用和以及开发了一个Java web应用程序。我的应用程序在本地pc上运行,没有任何错误。 但是在我托管了我的应用程序之后,我无法访问servlet。它给了我错误。我不习惯在我的应用程序中映射servlet。我使用了。 托管服务器使用和。 可能是什么问题?我该怎么解决这个问题? 新更新 我购买主机的地方给了我上传文件的。tomcat中没有上传文件的地方,也没有上传文件到director的地方。所
我在mac os中使用pip安装opencv python。现在是cv2。imshow函数给出以下错误 OpenCV错误:未指定的错误(函数未实现。使用Windows、GTK 2. x或Carbon支持重建库。如果你在Ubuntu或Debian上,安装libgtk2.0-dev和pkg-config,然后在cvShowImage中重新运行cmake或配置脚本) 我如何解决这个问题?为什么pip不检