为什么我不能在类定义中插入字符串?

时间:2015-09-26 19:59:48

标签: string swift

我不能在课程定义中做这样的事情:

let parametersForFeedRequest = "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"

但代码如下:

let parametersForFeedRequest = "?fields=type,id,created_time,description&limit="+"\(25)"

编译好。为什么呢?

btw:parametersForFeedRequest是类值成员。

这是类中的代码(从注释中移出):

class FbFeedViewController: UITableViewController, FBSDKLoginButtonDelegate {
    @IBOutlet weak var menuButton:UIBarButtonItem!
    let postsPerScreen = 25
    let parametersForFeedRequest = "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"
}

1 个答案:

答案 0 :(得分:1)

self.postsPerScreen在类实例化时不可用(因为在初始化实例之前未定义self)。因此,您无法使用另一个属性的值来定义一个属性。为了解决这个问题,你有几个不同的选择:

  1. 您可以在初始化程序中指定parametersForFeedRequest

  2. 您可以使用关键字lazy设置一个闭包,在第一次访问时初始化您的属性:

    lazy var parametersForFeedRequest: String = {return "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"}()
    

    当您访问该属性时,该实例将被初始化并且self将可用。这只会初始化一次属性。

  3. 您可以定义每次访问该属性时都会运行的计算属性

    var parametersForFeedRequest:String {return "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"}