【问题标题】:NSCoding : How to create required init in inherited classesNSCoding:如何在继承的类中创建所需的 init
【发布时间】:2016-03-08 11:19:37
【问题描述】:

我和 vince (NSCoding required initializer in inherited classes in Swift) 有同样的问题

我有一个类“So​​urce”和一个子类“RSSSource”。这些类符合NSObjectNSCoding,我希望能够坚持使用NSKeyedArchiver

我不知道如何在子类中创建所需的便利init?(coder aDecoder: NSCoder)。我想调用超类的方便init

PS:我知道我应该在他的帖子上发表评论,但我不能。 (声望太低)

【问题讨论】:

    标签: ios swift nscoding nskeyedarchiver


    【解决方案1】:

    这是一个简单的例子:

    class Source: NSObject, NSCoding {
    
      var name: String?
    
      func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(name, forKey: "name")
      }
    
      required init?(coder aDecoder: NSCoder) {
        name = aDecoder.decodeObjectForKey("name") as? String
      }
    
    }
    
    class RSSSource: Source {
    
      var rssName: String?
    
      override func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(name, forKey: "rssName")
        super.encodeWithCoder(aCoder)
      }
    
      required init?(coder aDecoder: NSCoder) {
        rssName = aDecoder.decodeObjectForKey("rssName") as? String
        super.init(coder: aDecoder)
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      我试过了,它只是自动添加编码。你不需要自己添加你的编码,否则你想改变。

      示例编码:

      required convenience init?(coder aDecoder: NSCoder)
      
      {
      
      fatalError("init(coder:) has not been implemented")
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-24
        • 2018-05-15
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        相关资源
        最近更新 更多