2015-09-26 93 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

相關問題