2016-02-28 31 views
0

我創建兩個單獨的文件[Page.swiftPageTableViewController.swift]什麼是在Swift中創建對象數組的正確語法?

在Page.swift:

class Page { 

     // MARK: Properties 
     var chapter: Int 
     var verse: Int 
     var sanskrit: String? 

     // MARK: Initialization 
     init?(chapter: Int, verse: Int, sanskrit: String?) { 
      // Initialize stored properties. 
      self.chapter  = chapter 
      self.verse  = verse 
      self.sanskrit  = sanskrit 
     } 


    } 

在我PageTableViewController.swift:

import UIKit 

class PageTableViewController: UITableViewController { 

    // MARK: Properties 
    var pages = [Page]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     createPages() 
    } 

    func createPages() { 

     let page1 = Page(chapter: 1, verse: 1, sanskrit: "अथ योगानुशासनम्") 
     let page2 = Page(chapter: 1, verse: 2, sanskrit: "योगश्चित्तवृत्तिनिरोधः") 

     pages += [page1, page2] // ERROR appears here as noted below.. 


    } 

} 

error出現在那裏,我得到:

Binary operator '+=' cannot be applied to operands of type '[Page]' and '[Page?]' 

爲什麼會這樣?

+0

我認爲這是因爲你的init?初始化器創建一個可選的而不是一個頁面。 –

回答

2

答案盯着你的權利的眼睛:

Binary operator '+=' cannot be applied to operands of type '[Page]' and '[Page?]' 

[第1頁,第2頁]是可選頁的數組。您不能將可選頁面的數組添加到Page的數組中。

爲什麼[page1,page2]是可選頁面的數組?因爲page1和page2是可選頁面。

爲什麼page1是一個可選的頁面?因爲你的init方法返回一個可選的頁面。它被稱爲init?而不是初始化。

爲什麼你的init方法返回一個可選的頁面?因爲這就是你的代碼所說的。我看不出你爲什麼這樣做的原因,但這就是你所做的。

(現在可能還有其他原因,在修復init方法返回非可選頁面後,它會失敗)。

+0

這是一個夢幻般的答案。非常感謝你解釋這一點。謝謝!!! – Trip

-2

在Swift中沒有用於與數組值交互的+ =操作數(用於添加到現有數組中,您將使用append)。我將你的代碼加載到一個Playground中,並通過用= =符號替換+ =來發現數組的功能。但是,因爲你的頁面初始化是可選的,我不得不解開第1頁和第2頁:

if let page1 = page1, 
    page2 = page2 { 
    pages = [page1, page2] //Unwrapped values added to array, fixes error 
} 

另一種可能的解決方案,使您不必總是解開這些值,或使用驚歎號,迫使他們解開是隻需刪除?從頁面對象的init。

相關問題