无法将类型'(Array <_>)。Type'的值分配给[CustomClass]

时间:2018-07-30 19:11:55

标签: objective-c arrays swift core-data

我正在一个同时使用Objective-C(旧代码)和Swift(新代码以及将来添加的任何代码)的项目中

我在CoreData模型中创建了两个新实体,我们将它们称为“文件夹”和“文件”。文件夹与文件有一对多的关系。

这是到目前为止我从自动生成的子类中提到的代码:

@interface Folder (CoreDataProperties)

+ (NSFetchRequest<Folder *> *)fetchRequest;
....
@property (nullable, nonatomic, retain) NSSet<File *> *files;
....
@end

@interface File (CoreDataProperties)

+ (NSFetchRequest<File *> *)fetchRequest;
....
@property (nullable, nonatomic, retain) Folder *folder;
....
@end

我正在处理Swift文件中的Folder记录,而我只是想通过Folder.files关系设置我在另一页上拥有的属性。

这是我要设置的另一个(“快速”)页面上的属性:

class FilesTableViewCell: UITableViewCell {

  ...
  var filesArray: [File]? = []
...
}

所以我试图将特定文件夹记录的文件设置为该属性:

//some other Swift file
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  ...
  let cell = tableView.dequeueReusableCell(withIdentifier: FilesTableViewCellIdentifier) as! FilesTableViewCell
  let currentFolder = folderArray.last
  cell.filesArray = currentFolder?.files 
  // the line does not work I get a "Cannot assign value of type 'Set<File>?' to type '[File]?'" error
  return cell
....

即使我在“ currentFolder?.files”的前面添加“(数组)”,我仍然会遇到以下错误:

"Cannot assign value of type '(Array<_>).Type' to type '[File]?'"

我对Swift的经验不足,所以有人可以帮助我了解为什么它不起作用以及潜在的解决方案吗? (在这一点上,我将只需要对所有文件夹的文件进行核心数据提取,但是我宁愿不必那么低效)

1 个答案:

答案 0 :(得分:1)

请注意,files不是Array,而是Set。 Set与array的不同之处在于它没有顺序,因此每次迭代Set顺序时(每次)都会不同。 Set确保一个对象只能添加一次,因此,如果您向Set添加两个相同的对象,则它将仅包含一个对象-因此不会重复。

要从Array获取Set,只需执行Array(yourSet),如果yourSet的类型为Set<File>,则数组的类型为[File]

您可以将代码更改为:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    ...
    let cell = tableView.dequeueReusableCell(withIdentifier: FilesTableViewCellIdentifier) as! FilesTableViewCell

    if let currentFolder = folderArray.last, let files = currentFolder.files {
        let filesArray = Array(files)
        cell.filesArray = filesArray
    }

    return cell
    ....
}