繁体   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