ios - 属性“self.readCount”未在 super.init 调用中初始化
问题描述
我有以下课程
// 学习项目
class LearningItem : NSObject {
var id: String
var title: String
var subtitle: String?
var image: String
var uploadDate: Int
init(id: String, title: String, image: String, uploadDate: Int) {
self.id = id
self.title = title
self.image = image
self.uploadDate = uploadDate
}
我还有一堂课
// Book.swift
class Book: LearningItem {
var publishDate: String?
var author: String?
var mediaUrl: String?
var video : String?
var tags: [String]?
var lists: [String: AnyObject]?
var readCount: Int
var categories: [String]?
var courses: [String]?
var amazonBuyUrl: String?
var starCount: Int
var read: Bool?
var completed = [String : Int]()
var stars = [String : Int]()
var completedDate : Int?
var desc: String
var epub: String
var authorDesc: String
init(id: String, title: String, desc: String, authorDesc: String, image: String, epub: String, readCount: Int, uploadDate: Int, starCount: Int) {
super.init(id: id, title: title, image: image, uploadDate: uploadDate)
self.id = id
self.desc = desc
self.authorDesc = authorDesc
self.title = title
self.epub = epub
self.image = image
self.readCount = readCount
self.uploadDate = uploadDate
self.starCount = starCount
}
我收到错误“在 super.init 调用时未初始化属性‘self.readCount’”
我在 Book.swift 中调用“super.init(id:id,title:title,image:image,uploadDate:uploadDate)”
解决方案
类初始化直到指定的初始化程序没有完成所有属性的初始化才完成,之后您可以调用超类的指定初始化程序
指定初始化器是类的主要初始化器。指定的初始化程序完全初始化该类引入的所有属性,并调用适当的超类初始化程序以继续沿超类链的初始化过程。
所以
Swift 中的类初始化是一个两阶段的过程。在第一阶段,每个存储的属性都由引入它的类分配一个初始值。一旦确定了每个存储属性的初始状态,第二阶段就开始了,每个类都有机会在新实例被认为可以使用之前进一步自定义其存储属性。
苹果文档https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
所以
class Book: LearningItem {
var publishDate: String?
var author: String?
var mediaUrl: String?
var video : String?
var tags: [String]?
var lists: [String: AnyObject]?
var readCount: Int
var categories: [String]?
var courses: [String]?
var amazonBuyUrl: String?
var starCount: Int
var read: Bool?
var completed = [String : Int]()
var stars = [String : Int]()
var completedDate : Int?
var desc: String
var epub: String
var authorDesc: String
init(id: String, title: String, desc: String, authorDesc: String, image: String, epub: String, readCount: Int, uploadDate: Int, starCount: Int) {
self.readCount = readCount
self.starCount = starCount
self.desc = desc
self.epub = epub
self.authorDesc = authorDesc
super.init(id: id, title: title, image: image, uploadDate: uploadDate)
}
}
推荐阅读
- r - 文件名作为 R 中小标题列表中的变量
- windows - 以编程方式为应用设置图形性能
- angular - 将角度 7 升级到 8,错误:this.typeChecker.getTypeArguments 不是构建库上的函数
- node.js - 如何从 node.js 项目运行 sh 脚本?
- java - 如何在 HSQL JRT 函数中使用 INTERVAL 类型?
- typescript - Loopback 4 - 从 Firestore 获取子集合
- android - 找不到类“com.esri.arcgisruntime.ArcGISRuntimeEnvironment”
- python - 为每次调用 print() 设置断点
- c# - 动画从底部到顶部 Xamarin 窗体的视图
- python - XGBoost 多类分类标签编码错误