我的swift项目无法编译:
进度条只停留在那里一段时间。起初,我认为它是由字典文字错误引起的。但不,不是。
经过很长一段时间删除代码以查看它是否编译后,我终于找到了问题所在。这段确切的代码导致编译器吓坏了!
if let desc = (operation as? CustomStringConvertible)?.description {
helpString += "<p>\(NSLocalizedString(desc, comment: ""))</p>"
}
没有字典/元组/数组文字,只是一个简单的强制转换和可选绑定。这导致整个事情被卡住了!
要重新定位,请创建测试项目或其他内容。将新文件添加到项目中并将此代码添加到文件中:
import UIKit
protocol Operation {
var operationName: String { get }
var operationAvailableInputs: [(name: String, desc: String)] { get }
var operationRejectFloatingPoint: Bool { get }
var operationImage: UIImage? { get }
func calculate (inputs: [String: Double]) -> [(name: String, from: String, result: String)]?
}
class OperationViewController: UITableViewController, UITextFieldDelegate, UIGestureRecognizerDelegate {
var operation: Operation!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showOperationHelp" {
let vc: UIViewController = segue.destinationViewController
var helpString: String = "<h1>\(NSLocalizedString(operation.operationName, comment: ""))</h1>"
if let desc = (operation as? CustomStringConvertible)?.description {
helpString += "<p>\(NSLocalizedString(desc, comment: ""))</p>"
}
helpString += "<ul>"
for (name, desc) in operation.operationAvailableInputs {
helpString += "<li>\(name): \(NSLocalizedString(desc, comment: "").stringByReplacingOccurrencesOfString("ANGLE_MEASURE", withString: NSLocalizedString("Radians", comment: "")))</li>"
}
helpString += "</ul>"
helpString += operation.operationRejectFloatingPoint ? NSLocalizedString("This operation accepts integers ONLY. Other forms of input will be ignored", comment: "") : ""
} else if segue.identifier == "showResults" {
}
view.endEditing(true)
}
}
只有36行代码。现在,cmd + B来构建项目,您将看到编译卡在此文件上。但是,如果您注释掉上面提到的行(第21-23行),代码就会成功编译。
这是Swift编译器中的错误吗?我应该提交错误报告吗?此外,就目前而言,我能做些什么才能达到相同的效果?
P.S。
“等效”的含义:
Operation
是一种协议。符合协议的某些类也符合CustomStringConvertible
。我想检查operation
是否符合CustomStringConvertible
,以便我可以将description
操作添加到helpString
。