簡體   English   中英

在Swift中創建對象數組的正確語法是什么?

[英]What is the correct syntax for creating an Object Array in Swift?

我創建了兩個單獨的文件[ Page.swiftPageTableViewController.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?]'

為什么會這樣呢?

答案注視着您:

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

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

為什么[page1,page2]是可選頁面的數組? 因為page1和page2是可選的Page。

為什么page1是可選頁面? 因為您的init方法返回一個可選的Page。 叫做init嗎? 而不是init。

為什么您的init方法返回可選的Page? 因為這就是您的代碼所說的。 我看不到您這樣做的原因,但這就是您所做的。

(現在,可能有其他原因導致您在修復init方法以返回非可選頁面后失敗)。

在Swift中,沒有+ =操作數可以與數組值進行交互(要添加到現有數組中,可以使用append)。 我將您的代碼加載到Playground中,並通過將+ =替換為僅=符號來發現數組起作用。 但是,由於您的頁面初始化是可選的,因此我不得不打開頁面1和頁面2:

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

另一種可能的解決方案是簡單地刪除?,因此您不必總是解開這些值或使用感嘆號來強制解開它們。 從Page對象的init中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM