2014-06-08 92 views
0

我有我的這個類中定義:範圍和方法傳遞

class TableViewController: UITableViewController { 

    let sections = ["Design", "Development", "Mobile"] 
    var blogPost1 = ["title" : "StackOverflow", "author" : "John Doe"] 
    var blogPost2 = ["Getting started" : "title", "John" : "author"] 
    var posts = [blogPost1, blogPost2] 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     var blogPosts = [blogPost1, blogPost2] 
    } 
} 

我不明白爲什麼我能夠內viewDidLoad創建的相關博客文章變量,但不blogPost2下的階級裏面?如果我嘗試,Xcode不會自動完成,並返回一個錯誤,說明ViewController沒有名爲「blogPost1」的成員。但是我可以在viewDidLoad()中創建它,但我不知道如何在其他函數中使用它。

第二期:

我有一個TableViewController。內的cellForRowAtIndexPath,我想發這條短信:

var posts = blogPosts.objectAtIndex(indexPath.row) 

但objectAtIndex沒有在自動完成建議。我敢肯定,這是一個新人的錯誤,但我迷路了。任何想法?

回答

0

對於第二個問題,objectAtIndex是一個NSArray類的方法,而您創建的變量blogPosts是Array(Swift)的類型。

只需使用標語法:

var posts = blogPosts[indexPath.row] 
0

回答你的第一個問題是性能與缺省值初始化沒有獲得self但因爲對象是尚未完全初始化。您需要將初始化移動到init方法中。

init() { 
    blogPost1 = ["title" : "StackOverflow", "author" : "John Doe"] 
    blogPost2 = ["Getting started" : "title", "John" : "author"] 
    posts = [blogPost1, blogPost2] 
} 

還要注意,你在鍵和值的使用上不一致,這會在以後咬你。

正如Oguz指出的,你的第二個問題是你試圖在Array上使用NSArray方法,最簡單的方法就是使用blogPosts[indexPath.row]但是,這可能不適合你,因爲blogPosts沒有被定義爲它被定義爲函數中的局部變量。您可以使用posts[indexPath.row]

+0

謝謝!至於不一致的用法,我是故意這樣做的。我正在學習一個教程。 – user2747220