我觉得这比任何事都更有趣.我修好了,但我想知道原因.这是错误:DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions
.为什么抱怨?这似乎是最简单的表达方式之一.
编译器指向该columns + ");";
部分
func tableName() -> String { return("users"); }
func createTableStatement(schema: [String]) -> String {
var schema = schema;
schema.append("id string");
schema.append("created integer");
schema.append("updated integer");
schema.append("model blob");
var columns: String = ",".join(schema);
var statement = "create table if not exists " + self.tableName() + "(" + columns + ");";
return(statement);
}
Run Code Online (Sandbox Code Playgroud)
修复是:
var statement = "create …
Run Code Online (Sandbox Code Playgroud) 我该如何避免使用!使用此功能解压缩操作通常是一个不好的选择.
使用它的代码有什么更好的选择,使用它使代码看起来更简单,因为if检查变量!被召唤永远不会是零,所以不能崩溃.
我的导师向我们介绍了bang(!)操作员,然后告诉我们再也不要使用它了.告诉我们为什么当然,如果可选项为零,它将使我们的应用程序崩溃.
然而,我发现自己处于这样的情况下,爆炸操作员似乎是最简洁和安全的选择.
func fullName() -> String {
if middleName == nil {
return "\(firstName) \(lastName)"
}else{
return "\(firstName) \(middleName!) \(lastName)"
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这样的事情?
此外,如果有人想知道,这是完整的课程.
class CPerson{
var firstName: String
var middleName: String?
var lastName: String
init(firstName: String, middleName: String?, lastName: String) {
self.firstName = firstName
self.middleName = middleName
self.lastName = lastName
}
convenience init(firstName: String, lastName: String) {
self.init(firstName: firstName, middleName: nil, lastName: lastName)
}
func fullName() -> String {
if middleName == nil {
return "\(firstName) \(lastName)" …
Run Code Online (Sandbox Code Playgroud)