一段看似无辜的快速代码需要很长时间才能编译。错误?

时间:2016-06-08 06:45:56

标签: ios swift compilation

我的swift项目无法编译:

enter image description here

进度条只停留在那里一段时间。起初,我认为它是由字典文字错误引起的。但不,不是。

经过很长一段时间删除代码以查看它是否编译后,我终于找到了问题所在。这段确切的代码导致编译器吓坏了!

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

0 个答案:

没有答案