简体   繁体   English

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

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

I created two separate files [ Page.swift and PageTableViewController.swift ] 我创建了两个单独的文件[ Page.swiftPageTableViewController.swift ]

In Page.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
        }


    }

And in my PageTableViewController.swift : 在我的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..


    }

}

But where the error appears, I get : 但是哪里出现error ,我得到:

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

Why would that be? 为什么会这样呢?

The answer stares you right in the eye: 答案注视着您:

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

[page1, page2] is an array of optional Page. [page1,page2]是可选Page的数组。 You can't add an array of optional Page to an array of Page. 您不能将可选页面数组添加到页面数组中。

Why is [page1, page2] an array of optional Page? 为什么[page1,page2]是可选页面的数组? Because page1 and page2 are optional Page. 因为page1和page2是可选的Page。

Why is page1 an optional Page? 为什么page1是可选页面? Because your init method returns an optional Page. 因为您的init方法返回一个可选的Page。 It's called init? 叫做init吗? and not init. 而不是init。

Why is your init method returning an optional Page? 为什么您的init方法返回可选的Page? Because that's what your code says. 因为这就是您的代码所说的。 I can't see a reason why you did that, but that's what you did. 我看不到您这样做的原因,但这就是您所做的。

(Now there might be other reasons why it fails after you fix your init method to return a non-optional page). (现在,可能有其他原因导致您在修复init方法以返回非可选页面后失败)。

In Swift there is no += operand for interacting with array values (for adding to an existent array you would use append). 在Swift中,没有+ =操作数可以与数组值进行交互(要添加到现有数组中,可以使用append)。 I loaded your code into a Playground and found by replacing the += with just an = sign the array functioned. 我将您的代码加载到Playground中,并通过将+ =替换为仅=符号来发现数组起作用。 However, because your init for pages is optional I had to unwrap page 1 and page 2: 但是,由于您的页面初始化是可选的,因此我不得不打开页面1和页面2:

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

Another possible solution so you don't need to always unwrap these values or use exclamation points to force unwrap them is to simply remove the ? 另一种可能的解决方案是简单地删除?,因此您不必总是解开这些值或使用感叹号来强制解开它们。 from the init for Page objects. 从Page对象的init中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM