لا يمكن تعيين قيمة من النوع '(Array <_>). اكتب' إلى [CustomClass]

0

أنا أعمل على مشروع يستخدم كلاً من Objective-C (رمز قديم) و Swift (رمز أحدث وأي رمز تمت إضافته في المستقبل)

لقد قمت بإنشاء كيانين جديدين في نموذج CoreData ، دعنا نسميهما Folder and File. للمجلد علاقة بأطراف مع ملف.

فيما يلي كود ما ذكرته حتى الآن عن الفئات الفرعية التي تم إنشاؤها تلقائيًا:

@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.files.

هذه هي الخاصية في الصفحة الأخرى (Swift) التي أحاول تعيينها:

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
....

حتى عندما أضيف "(Array)" إلى مقدمة "currentFolder؟ .files" ، ما زلت أحصل على الخطأ التالي:

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

أنا لست من ذوي الخبرة في Swift ، لذا يمكن لأي شخص مساعدتي في فهم سبب عدم نجاح ذلك والحل المحتمل؟ (في هذه المرحلة ، سأضطر فقط إلى جلب البيانات الأساسية لجميع ملفات المجلد تلك ، لكنني أفضل ألا أكون غير فعال إذا لم يكن علي ذلك)

1 إجابة

1
افضل جواب

لاحظ أن files ليس Array بل هو Set . تعيين يختلف عن الصفيف في أنه غير مرتبة ، لذلك عند التكرار من خلال a Set يمكن أن (يكون) الأمر مختلفًا في كل مرة. Set ومع ذلك تأكد من أنه يمكن إضافة كائن واحد مرة واحدة فقط ، لذلك إذا قمت بإضافة كائنين متماثلين Set سيحتوي على كائن واحد فقط - لذلك لا يوجد تكرارات.

للحصول على Array من عند Set فقط افعلها Array(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
    ....
}
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام