我不能在课程定义中做这样的事情:
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)"
}
答案 0 :(得分:1)
self.postsPerScreen
在类实例化时不可用(因为在初始化实例之前未定义self
)。因此,您无法使用另一个属性的值来定义一个属性。为了解决这个问题,你有几个不同的选择:
您可以在初始化程序中指定parametersForFeedRequest
。
您可以使用关键字lazy
设置一个闭包,在第一次访问时初始化您的属性:
lazy var parametersForFeedRequest: String = {return "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"}()
当您访问该属性时,该实例将被初始化并且self
将可用。这只会初始化一次属性。
您可以定义每次访问该属性时都会运行的计算属性:
var parametersForFeedRequest:String {return "?fields=type,id,created_time,description&limit="+"\(self.postsPerScreen)"}