Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Swift中创建对象数组的正确语法是什么?_Arrays_Swift_Object - Fatal编程技术网

Arrays 在Swift中创建对象数组的正确语法是什么?

Arrays 在Swift中创建对象数组的正确语法是什么?,arrays,swift,object,Arrays,Swift,Object,我创建了两个单独的文件[Page.swift和PageTableViewController.swift] 在Page.swift中: class Page { // MARK: Properties var chapter: Int var verse: Int var sanskrit: String? // MARK: Initialization init?(chapter: In

我创建了两个单独的文件[
Page.swift
PageTableViewController.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..


    }

}
但是当出现
错误时,我得到:

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

为什么会这样?

在Swift中,没有+=操作数用于与数组值交互(用于添加到现有数组,您将使用append)。我将您的代码加载到一个游乐场中,并通过将+=替换为一个=符号来发现数组的功能。但是,由于页面的初始化是可选的,因此我必须打开第1页和第2页:

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

另一种可能的解决方案是,只需删除?从页面对象的初始化中。

答案就在眼前:

Binary operator '+=' cannot be applied to operands of type '[Page]' and '[Page?]'
[page1,page2]是可选页面的数组。无法将可选页面数组添加到页面数组中

为什么[page1,page2]是可选页面的数组?因为page1和page2是可选页面

为什么第1页是可选页?因为init方法返回一个可选页面。它叫init?而不是init

为什么init方法返回可选页面?因为你的代码就是这么说的。我看不出你为什么那样做,但你就是这么做的


(现在,在修复init方法以返回非可选页面后,它失败的原因可能还有其他原因)

我想是因为你的初恋?初始值设定项创建可选的而不是页面。