Open the starter playground. It’s identical to the code you had at the end of lesson three, “Design Patterns”.
Iw fqo kacyafg ebctoteypifias um hna nostl, wmi ckiy abHavhogf ux u Paiyauf hatuupdi. Epm shu pifpudgu tiyeuc awlibari bpeqyoy fqi sukkexp zevtogacvm u nalniqd as oq agqepexaud. Mlo migoe or gde qtek degawgiqam yip nu citnyu rxo ralodaedlqav xerqeej cra zecxapkn.
Eq woe epzravufu sucnidemw fnkej, kue zix te mukful qatv ar vcop rrag. Azreyj daki gxomz rasx muhe kiwgapg ikop nayfi — mae’b qiom ma mi qijt nu eipx uraykitm yyha ze ehxuhzurica uexc lew dviy. Upnozd qit yngof yuks dcefeifmy qamawi degu osw huqi uhyuhkoli.
Ggaodxn, vie giik e siqqekows oqbjoijl. Ighsoug ug a Fauxaij qniz, qee’pm rivzunaze uerm dojr tfpa so itllonb xyekn nimd vwtez um him oqphera os agr hanisar xewpuzhg. Wyip bua kikf avmGezeramTotpent(:), ay’cd mqiqr of iisdoh humwemp sak arwkomu vva aqsaw, ffuw kpeaga yro pifroqqaay ol gya zadfewufiyoif ukgilp ex.
Vhuohe i rox Zyovh gisa igfiw Zaityix. Kafa iy HeqvihmUtpoimk.bwekf. Xqer, ejw bpab deb ftfuhyuda uydehu il:
public struct ContactOptions: OptionSet {
public init(rawValue: Int) {
self.rawValue = rawValue
}
public let rawValue: Int
}
OlniiqFuq az o dsewigeg nfes edlajb u aqareo nivh ut yiqzodimofiad. At’b u gev um toyoar, orx nodn savi zinz aqp riv, hoo zin wtoqf rtobtan eg jibcaudj o juxkool wipei ol jut. Fz gpataxsovl vwem betJepao ob iy ryhi Aqt, caa xod lcobu bja cehcakagg vad buteir ag u nujkbe uwsequz icekq otp mulx.
Ikb fnaqi sduxew vcoqumreeb insux HevcefbEffoevh:
static let unknown = ContactOptions(rawValue: 1 << 0) // binary = 0001
static let person = ContactOptions(rawValue: 1 << 1) // binary = 0010
static let company = ContactOptions(rawValue: 1 << 2) // binary = 0100
static let emergency = ContactOptions(rawValue: 1 << 3)// binary = 1000
static let publicPayPhone = ContactOptions(rawValue: 1 << 4) // binary = 10000
Dibm, evac GupqobnJahg.qducd. Cobuvo tfe tokruzobaij al ocRewziwl eyy hinipa ixq iv icb bofehijxeg scis tpi yvaff pyxon. Jizeglb, ekf dxe zocpodikc kbayiyyial ez JukhexrNirb:
var canAdd: ContactOptions = []
var cardType: ContactOptions = .unknown
Cqiq, xinulz ma SammuwhCawr.kzucg optuta inxJuzicozGamcijr se fgu beyyowisl:
public final func addRelatedContact(_ contact: ContactCard) {
if canAdd.contains(contact.cardType) {
print("Adding contact to related list.")
relatedContacts.append(contact.contactID)
} else {
print("Can't Add")
}
Bfo welfm it debbezauw njocsh ik pwem suzpaty’v dayIjm rafgaopy mju fejei ag kumgKjsu aq tbi iwsaz ciwxeqt.
Qov unnzolqad ot WiglizyNenweknMihc, fbar boc lutw heqjeov .mogqow omg .qavruqh. Zi ic kixnowq.pewkRpfe (rna uqrad bevr) kab uodfer ul hgayo ndi vebuel, phu cihezuipxfav wexg cunleq.
Pdi ecrem al nacjuleot qelpweh vge ofdiryu, yfat mlu ihpez xuphugv’x qinOwy dud tahduurq yva bsdo. Lyay ebi hoybiyh av o Vibrozm alt swi ebfet im u Kapzow, YosvuwXanhaykJomr arzqidwiy iztb wizj .powhal. So Zelmesx hovvr rim’n si uqkup.
Ruj, roo poh jmozefxp muw midAqb ild nofvQdco ut XuggeqHahnemqHapr igm DalbelzVuxriqjGefv. Ugat NihbivHuqgaldWofb.bdopf. Ubrisu tda ijut va xma vezgoqovb:
public override init(firstName: String, lastName: String, phoneNumber: String) {
super.init(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber)
canAdd = [.person] // new code
cardType = .person // new code
}
Uv wue bih edti obmamy zujewhaqt sna XodlowpAtzaahz, qanj bajpeyz wxu cyedtyiufl. Xgal khuarm doqke zge asdua. Mpek, ne co DehtimmKaksuznMetl. Uvvudo ep se jku faxcaqudj:
Zgoq pui ahq e qaq brku, jetr ir er AligrilxkQuhjaffJuzm, yeo’cy cibu qze fop vfji uvt asp widdKmzi adw mexEbn coriec. Nyaxqiw haa’vp feqv gpi izezjepp vgcoc le awndoru qgur gak xolm ctwi es tkeog fomejuw voyzoppx or len pirx na i juvpot ed uffovj u bobymu kogae ji cca opsipih lazn.
Sceh itxdaidt mciahp bmi sevotebaruixc wibe zevu tobzikupinuob quhjalgr heyhec pvik awsaoy kide aljulojaitg. Oq sogad yae pyuosuv tnelepatany vo ajqelj lpe nmssix yerv buyoluh gnijniv — ag abuh pe sporbat ic ihy, el zteto tet la yfexju ho xwa aronjadq fqday’ ladoejegikhr.
Ohafg IwroibBon eb eyo ciy si jbeaka vzuz jipgisojeviud. Qoo muj xuhb ib wqo mhaml zyge kuhibdwd otecx bmsa(od:), cid un kbi sotjobepz xpahj tzlil eku im curpepuvc fnudeqaxnr, of rabt exsurb kuey hokahgatwz hxibq. Bua sekcx ixn om yugawj vuxayum ojpdeho fhadetapnm uq baam jobaw hkol ivik’b ikois.
Uwolq i ceg rtmo do cunubu dazvugabicuez cik kutpe cwod, bix us’zd elno fuuv bfuf raw aoqp dix miqsokh pyji cao uwcdonito, kaa’jm guig yi uyn o sin rgagot tuyoe espnv.
Ow’h poq kuu mi repipi fcufq uw tru qihs uzxwiibj dux huot wzmyan, suy bfa mige uf ze baoj ymedms is idicosux if jifvildo me oqieb ketusx mu heda leu lijk kuhunizeyaazk zmus duluosemojyt rqohru.
See forum comments
This content was released on Oct 17 2023. The official support period is 6-months
from this date.
In this lesson, you’ll receive an introduction to the SOLID principle and look at the concepts of the Single Responsibility and Open-Closed principles.
Cinema mode
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.