【问题标题】:Update Swift Language: Type 'NSCoder' has no member 'plain'更新 Swift 语言:类型“NSCoder”没有成员“普通”
【发布时间】:2018-12-21 17:55:00
【问题描述】:

我只是在更新后更新 xcode(10.0) 以及 swift 语言版本(4.2),但在更新 swift 语言的过程中给了我一些错误。我真的很困惑如何解决这个问题:

错误:

类型 'NSCoder' 没有成员 'plain'

 var _followingChatControl: FollowingChat!
    var followingChatControl: FollowingChat {
        get {
            if _followingChatControl == nil {
                _followingChatControl = FollowingChat.init(coder: .plain)
            }
            return _followingChatControl
        }
        set {
            _followingChatControl = newValue
        }
    }

错误截图:

FollowingChat 类代码:

import UIKit

class FollowingChat: AbstractTableListControl{

    var listDataFollowing: [Following]?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.separatorStyle = .none
        self.tableView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        self.tableView.delegate = self
    }

    override var cellClass: AbstractTableCell.Type {
        return ScreenChatCell.self
    }

    override var isNibUsed: Bool {
        return true
    }

    override func refresh() {
        super.refresh()
    }

FollowingChat 类屏幕截图:

【问题讨论】:

  • 如果不知道FollowingChat 是什么以及它有哪些初始化程序,就不可能回答您的问题。
  • 漂亮的 objective-c-ishly 气味代码。在 Swift 中,lazy var followingChatControl = FollowingChat(coder: .plain) 行完全一样。
  • @MartinR 请检查
  • 我仍然看不到您的代码中的 init(coder:) 初始化程序...
  • 在更新 xcode 以及 swift 版本后显示错误类型 'NSCoder' 没有成员 'plain'

标签: ios swift xcode


【解决方案1】:

您应该将必需的初始化程序插入到您的FollowingChat 类中:

import UIKit

class FollowingChat: AbstractTableListControl{

var listDataFollowing: [Following]?

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

}

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.separatorStyle = .none
    self.tableView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    self.tableView.delegate = self
}

override var cellClass: AbstractTableCell.Type {
    return ScreenChatCell.self
}

override var isNibUsed: Bool {
    return true
}

override func refresh() {
    super.refresh()
}

完成此操作后,您可以轻松创建FollowingChat 对象:

var _followingChatControl: FollowingChat!
    var followingChatControl: FollowingChat {
        get {
            if _followingChatControl == nil {
                _followingChatControl = FollowingChat()
            }
            return _followingChatControl
        }
        set {
            _followingChatControl = newValue
        }
    }

问题似乎是您继承自的 AbstractTableListControl 类。它需要该初始化程序才能工作。看看这个类也需要什么初始化程序。例如,当 AbstractTableListControl 类有一个空白的 init 函数时,您可以将其添加到您的 FollowingChat 类中:

override init() {
 super.init()
 //your code here
}

【讨论】:

    【解决方案2】:

    尝试在课堂上使用另一个 init。

    init(dict : NSDictionary) {
    
    }
    
    And use it as below.
    
    
    let _followingChatControl = FollowingChat.init(dict: [:])
    

    [:] -> 对象类型在这里,我在示例中使用了 NSDictionary。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2021-04-15
      • 2017-01-21
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多