Eu estava fazendo alguma codificação e tentei criar uma instância do TIE sem o valor de velocidade.
class TIE {
var name: String
var speed: Int
init(name: String, speed: Int) {
self.name = name
self.speed = speed
}
}
let fighter = TIE(name: "wow")
print(fighter.speed)
Se o inicializador personalizado tem como objetivo garantir que nenhum valor seja nulo, por que não posso simplesmente fazer isso?
let fighter = TIE(name: "wow")
print(fighter.speed)
Por que preciso ter a velocidade também? Isso não significa que o inicializador personalizado é inútil?
Isso não está bem certo... todos os inicializadores ("custom" ou não) são o código responsável por, bem, inicializar todas as propriedades. Até mesmo opcionais como
Int?
precisam ser inicializados, e nesse casonil
é um valor perfeitamente válido que você pode definir.Porque você adicionou uma
speed
propriedade armazenada à suaTIE
classe. Se não quiser, remova-a. Você não pode deixá-la com um valor indefinido.Se você quiser inicializar
TIE
objetos sem definir a velocidade explicitamente, você pode usar um argumento padrão:Se você quiser proibir a inicialização com uma velocidade personalizada, você pode definir um inicializador estático para
speed
:Não é
custom initalizer
, é obviamente um processo necessário antes de usar qualquer classe, struct ou enum. Você deve definir os valores iniciais para todas as propriedades armazenadas antes de usá-lo. Você pode dar uma olhada nesta documentação de inicialização .Se você quiser omitir o valor de
speed
. Você pode tentar outroconvenience init
e então fornecer um valor padrão para este campo. E então você pode criar uma instância TIE com ou semspeed
.