[英]'self' used before super.init call and property not initialized at super.init call
[英]Property 'self.readCount' not initialized at super.init call
我有以下 class
// 學習項目
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
}
我還有一個 class
// 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
}
我收到錯誤“Property 'self.readCount' not initialized at super.init call”
我在 Book.swift 中調用“super.init(id: id, title: title, image: image, uploadDate: uploadDate)”
Class 初始化未完成直到指定初始化程序未完成所有屬性的初始化,之后您可以調用超類的指定初始化程序
指定初始化器是 class 的主要初始化器。指定初始化器完全初始化該 class 引入的所有屬性,並調用適當的超類初始化器以繼續沿着超類鏈向上的初始化過程。
所以
Swift中的Class初始化是一個兩階段的過程。 在第一階段,每個存儲屬性由引入它的 class 分配一個初始值。 一旦確定了每個存儲屬性的初始 state,第二階段就開始了,每個 class 都有機會在新實例被認為可以使用之前進一步自定義其存儲屬性。
蘋果文檔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)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.