poet.books throw fatal error: NSArray element failed to match

poet.books throw fatal error: NSArray element failed to match

请帮忙,这个错误破坏了我的应用程序。 我有两个 classes: 第一Class-诗人

class Poets 
 {

    var poetName:String = ""
    var poetYearsOfLife:String = ""
    var poetImage:String = ""
    var poetBiography:String = ""
    var books=[Works]()
}

第二部class作品

class Works 
{
    var nameWork:String = ""
    var workPoet:String = ""
}

TableViewController

var poetsPath = NSBundle.mainBundle().pathForResource("Poets1", ofType: "plist")
    var poetsArray = NSArray(contentsOfFile: poetsPath!)!
    var booksPath = NSBundle.mainBundle().pathForResource("Works1", ofType: "plist")
    var booksDict = NSDictionary(contentsOfFile: booksPath!)

    for poetArray in poetsArray
    {
        let poet=Poets()

        poet.poetName = poetArray["name"] as! String
        poet.poetImage = poetArray["image"] as! String
        poet.poetYearsOfLife=poetArray["yearsOfLife"] as! String
        poet.poetBiography=poetArray["biography"] as! String
           poets.append(poet)



        poet.books = booksDict![poet.poetName as String] as! [(Works)]//<---error
        for bookArray in poet.books {
            var book=Works()
           book.nameWork = "nameWork"



            }
    }

我该如何修复这个错误?

fatal error: NSArray element failed to match the Swift Array Element type

我有Work1.plist。我尝试进行 segue 并从 table.Sorry 中的 Poets1.plist 中的特定 poetName 关联的 plist 中传递值,因为我的英语不好。

<plist version="1.0">
<dict>
<key>poet_name1</key>
<array>
    <dict>
        <key>nameWork</key>
        <string>Благовест</string>
        <key>work</key>
        <string>Среди дубравы</string>
    </dict>
</array>
<key>poet_name2</key>
<array>
    <dict>
        <key>nameWork</key>
        <string>Бессонные ночи</string>
        <key>work</key>
        <string>Какой кошмар!</string>
    </dict>
</array>
</dict>
</plist>

我的建议是为您的 Works class 添加一个初始值设定项:

class Works {

    var nameWork = ""
    var workPoet = ""

    init(nameWork: String, workPoet: String) {
        self.nameWork = nameWork
        self.workPoet = workPoet
    }
}

那么你可以这样使用它:

let worksArray = booksDict[poet.poetName as String] as! NSArray
for work in worksArray {
    let dictionaryFromArray = work as! NSDictionary
    let workObject = Works(nameWork: dictionaryFromArray["nameWork"] as! String, workPoet: dictionaryFromArray["work"] as! String)
    poet.books.append(workObject)
}