Я обнаружил ошибку при проверке некоторых кодов от Github.Два похожих класса показывают разные ошибки инициализации
class Profile {
let text: String
let date: String
let id: String?
init?(data: NSDictionary?) {
if let text = data?.valueForKeyPath(Test.Text) as? String {
self.text = text
if let date = data?.valueForKeyPath(Test.Created) as? String {
self.date = date
id = data?.valueForKeyPath(Test.ID) as? String
}
}else{
return nil
}
}
struct Test {
static let Text = "text"
static let Created = "created"
static let ID = "id"
}
}
Линия init?
показывает ошибку «константы self.data использовали до инициализации.»
И создать подобный класс его, как
class Context {
let words: String
init?(text:String?) {
if let words = text {
self.words = words
}else{
return nil
}
}
}
На этот раз он показывает «все сохраненные свойства экземпляра класса должны быть инициализированы перед returing ноля из инициализатора.»
Для первого, есть обходное решение, что я могу удалить блок else
и дать каждому свойству пустое значение исправить ошибку. Однако мне пришлось бы изменить свойства, изменяемые. (я не хочу, чтобы он был изменчивым)
И для второго примера я просто вставляю self.word = ""
, прежде чем линия return nil
также может исправить эту ошибку.
Но я действительно удивляюсь, почему эти подобные случаи показывают разные ошибки и реализуют логику Свифта и как я могу исправить это правильно?
Спасибо, что помогли мне.
Спасибо большое, я понять это !! И я думаю, вам нужно больше узнать, как использовать инициализатор в Swift. – Donny
Привет, Донни, инициализация классов немного сложна в Swift, так как Swift выглядит очень легко, но вам все равно нужно применять стандартные объективные ориентированные принципы, как в Objective-C. Если вы хотите получить хорошие лекции по Swift, см. Курс Swift в iTunes U из Университета Плимута. У них также есть эта лекция по классам и инициализации. https://itunes.apple.com/nl/course/section-3-step-5-dismissing/id950659946?i=356885145&mt=2 – MacUserT