Sono un principiante di Swift e sto cercando di capire come usare Structs con proprietà facoltative. Ho fatto un bel po 'di ricerche e ho ottenuto qualcosa che funziona ma si sente incredibilmente inefficiente, quindi mi chiedevo se ci fosse un modo migliore/più gestibile per raggiungere il mio obiettivo.Iniziale Swift Struct con proprietà memorizzate opzionali
Mi piacerebbe utilizzare Structs per rappresentare un'azienda, ma non ho idea in anticipo di quale combinazione di proprietà è probabile che abbia un'azienda specifica. Questo sembra significare che devo creare un init() per ogni possibile combinazione di parametri.
Ecco un esempio semplificato (Ho molte più proprietà):
import Foundation
struct Business {
let name : String
var web : String?
var address: String?
// just the business name
init(busName: String) {
self.name = busName
}
// business name + website
init(busName: String, website: String) {
self.name = busName
self.web = website
}
// business name + address
init(busName: String, address: String) {
self.name = busName
self.address = address
}
// business name + website + address
init(busName: String, website: String, address: String) {
self.name = busName
self.web = website
self.address = address
}
}
Posso quindi inizializzare il classe come questa:
Business(busName: "Dave's Cafe", website: "http://www.davescafe.com")
Business(busName: "Sarah's Brewhouse", address: "41 Acacia Ave, Smalltown")
Non c'è un modo per creare una sorta di init () dove i parametri sono opzionali? Se tu potessi indicarmi la direzione di termini o concetti per la ricerca, sarebbe fantastico.
Questi dovrebbero essere 'String?' E non 'String'. – jtbandes
Grazie a @dasdom ho provato ad usare il '?' Dopo il tipo (es. '... website: String? ...' come pensavo che l'utilizzo di quella sintassi impostasse automaticamente il valore su nil. Questo non funzionava, quindi non ho provate a impostare esplicitamente il valore su zero. Proverò ora. – James
Sì, 'String' o' String? 'è solo un tipo; non ha molto a che fare con un valore predefinito (purché stiamo parlando di parametri di funzione). Avresti potuto avere anche un valore di default per un parametro String, come 'init (busName: String =" ")' anche se penso che gli optionals siano il modo giusto per farlo. – jtbandes