无法在 Swift 的 ViewController class 中创建子 class 的对象

Unable to create a subclass's object in Swift's ViewController class

  1. 我创建了一个名为 'Treasure.swift' 的 swift class 并在同一个文件中创建了它的子 class,如下所示:

    import Foundation
    
    class Treasure
    {
        let what: String
        let latitude: Double
        let longitude: Double
    
        init ( what: String, latitude: Double, longitude: Double)
        {
            self.what = what
            self.latitude = latitude
            self.longitude = longitude
        }
    
        class HistoryTreasure: Treasure
        {
            let year: Int
    
            init(what: String, year: Int, latitude: Double, longitude: Double)
            {
                self.year = year
                super.init(what: what, latitude: latitude, longitude: longitude)
            }
        }
    
  2. 然后我创建一个'ViewController.swift'class并添加以下代码:

    import UIKit
    
    class ViewController: UIViewController
    {
        var treasures : [Treasure] = []
    
        override func viewDidLoad()
        {
            super.viewDidLoad()
    
            self.treasures = [HistoryTreasure()]
       }
     }
    
  3. 问题是,我创建了一个 ViewController class 'treasures' 的 属性 并将其声明为 'Treasure' 的数组类型。当我像这样在上面的数组中插入对象时:“self.treasures = [Treasure(what: "hi", longitude: -37, latitude: 78),]”,它运行良好,但是当我尝试插入类型为 'HistoryTreasure' 的对象时([=38= 的子class ]) ,然后它显示我们的错误:"Use of unresolved identifier 'HistoryTreasure'".

  4. 而且这个 'ViewController' class 无法独立识别 'Historytreasure' class,即无法导入它。请帮助我理解以上几点。

  1. 在@nhgrif 的评论的帮助下,我在上面的代码中发现了错误。第一个问题是错误的,我正在创建 'Treasure' class 的嵌套 class 'HistoryTreasure'。但是我想做一个超级class'Treasure'的简单子class(历史宝藏)。所以我在我的代码中做了以下更改(在 'HistoryTreasure' class 开始之前关闭 'Treasure' class 的大括号):

    class Treasure : NSObject
    {
        let what: String
        let latitude: Double
        let longitude: Double
    
        init ( what: String, latitude: Double, longitude: Double)
        {
            self.what = what
            self.latitude = latitude
            self.longitude = longitude
        }
    }
    
    class HistoryTreasure: Treasure
    {
         let year: Int
    
         init(what: String, year: Int, latitude: Double, longitude: Double)
         {
             self.year = year
             super.init(what: what, latitude: latitude, longitude: longitude)
         }
    }`
    
  2. 现在我的代码 运行 非常好并且能够生成和插入子 class 'HistoryTreasure' 的对象到 'Treasure' 类型的数组中ViewControllerclass

self.treasures = [HistoryTreasure(what: "hi", year: 1992, latitude: -37, longitude: 420)]