我创建了两个单独的文件[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..
}
}
但是error
出现的地方,我得到了:
Binary operator '+=' cannot be applied to operands of type '[Page]' and '[Page?]'
为什么会这样?
答案 0 :(得分:2)
答案盯着你的眼睛:
Binary operator '+=' cannot be applied to operands of type '[Page]' and '[Page?]'
[page1,page2]是一个可选的Page数组。您不能将可选页面数组添加到Page数组中。
为什么[page1,page2]是一个可选的Page?因为page1和page2是可选的Page。
为什么page1是可选页面?因为您的init方法返回一个可选的Page。它被称为init?而不是init。
为什么你的init方法返回一个可选的Page?因为这就是你的代码所说的。我看不出你为什么这么做的原因,但这就是你所做的。
(现在,在修复init方法返回非可选页面后,可能还有其他原因导致其失败)。
答案 1 :(得分:-2)
在Swift中,没有+ =操作数用于与数组值交互(对于添加到现有数组,您将使用append)。我将您的代码加载到Playground中,通过将= =替换为=符号来找到数组。但是,因为您的页面初始化是可选的,所以我必须打开第1页和第2页:
public class BlogComment
{
public int Id { set; get; }
[MaxLength]
public string Body { set; get; }
public virtual BlogComment Reply { set; get; }
public int? ReplyId { get; set; }
public ICollection<BlogComment> Children { get; set; }
}
using (var ctx = new MyContext())
{
var list = ctx.BlogComments
//.where ...
.ToList() // fills the childs list too
.Where(x => x.Reply == null) // for TreeViewHelper
.ToList();
}
另一种可能的解决方案,因此您不需要始终打开这些值或使用感叹号来强行打开它们,只需删除?来自Page对象的init。