函数产生预期的类型"字符串",你的意思是用"()"来调用它。

时间:2016-04-20 15:58:59

标签: ios swift

let documentUrl: NSURL? = {
    return NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first
}

var test: String = {
    return "String"
}

这是一段非常简单的代码,但是Xcode有一个错误,要我在计算属性的末尾添加(),如下所示:

let documentUrl: NSURL? = {
        return NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first
    }()

var test: String = {
            return "String"
        }()

谁能告诉我为什么?

1 个答案:

答案 0 :(得分:5)

你写了这个:

var test: String = {
    return "String"
}

那是不是计算属性。您正在将变量test初始化为函数体(匿名函数,有时称为闭包)。那不是你的意思。您希望调用该函数并将变量test设置为结果。括号使这种情况发生;这就是调用函数的方式。因此:

var test: String = {
    return "String"
}()

因此,您可以在一次移动中定义函数并调用它,并将结果指定为test的初始值。

如果你想要一个计算属性,你应该这样写:

var test: String {
    return "String"
}

请注意,没有等号。更完整的形式是:

var test: String {
    get {
        return "String"
    }
}