簡體   English   中英

屬性 'self.readCount' 未在 super.init 調用時初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM