2015-09-26 85 views
0

我不能做这样的事情类定义:为什么我不能在类定义中插入字符串?

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

你能为你做什么更多的背景? '类FbFeedViewController:的UITableViewController,FBSDKLoginButtonDelegate { @IBOutlet弱VAR菜单按钮:作为提供的应该编译罚款,只要self.postsPerScreen可以转换为字符串,并在当前范围内 –

+0

@ChrisC没错,这里访问的代码的UIBarButtonItem ! // ... 让postsPerScreen = 25 // ... 让parametersForFeedRequest = “?场=类型,ID,CREATED_TIME,描述&限=” + “\(self.postsPerScreen)”' – drewpts

+0

哦,怎么能我在minimarkdown新行?对不起 – drewpts

回答

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)"} 
    
+0

谢谢!封闭的解决方案似乎非常聪明。 – drewpts

相关问题