) } // Subscribe to the publisher

Kā redzat, mēs izmantojam ziņojumu, lai piekļūtu iesaiņotajam īpašumam, un ziņojumu $, lai piekļūtu izdevējam. Kas jums jādara, lai iesaiņojumam pievienotu paredzēto vērtību? Nekas īpašs, vienkārši paziņojiet to.

@propertyWrapper struct Published { private let subject = PassthroughSubject() var wrappedValue: Value { didSet { subject.send(wrappedValue) } } var projectedValue: AnyPublisher { subject.eraseToAnyPublisher() } }

Kā minēts iepriekš, projectedValue īpašumam var būt jebkura veida, pamatojoties uz jūsu vajadzībām.

Ierobežojumi

Jaunā īpašuma iesaiņotāju sintakse izskatās labi, bet tajā ir arī vairāki ierobežojumi, no kuriem galvenie ir:

  1. Viņi nevar piedalīties kļūdu apstrādē. Iesaiņotā vērtība ir īpašums (nevis metode), un mēs nevaram atzīmēt getter vai seter kā throws. Piemēram, mūsu Email Piemēram, nav iespējams mest kļūdu, ja lietotājs mēģina iestatīt nederīgu e-pastu. Mēs varam atgriezties nil vai avarējiet lietotni ar fatalError() zvanu, kas dažos gadījumos varētu būt nepieņemams.
  2. Īpašumam nav atļauts lietot vairākus iesaiņotājus. Piemēram, labāk būtu atsevišķs @CaseInsensitive iesaiņojiet un apvienojiet to ar @Email iesaiņojuma vietā, lai izveidotu @Email iesaiņojuma korpuss nejutīgs. Bet šādas konstrukcijas ir aizliegtas un rada kļūdas kompilācijā.
@CaseInsensitive @Email var email: String?

Kā risinājumu šim konkrētajam gadījumam mēs varam mantot Email iesaiņojums no CaseInsensitive iesaiņojums. Tomēr mantojumam ir arī ierobežojumi - tikai klases atbalsta mantojumu, un ir atļauta tikai viena pamatklase.

Secinājums

@propertyWrapper anotācijas vienkāršo īpašumu iesaiņotāju sintaksi, un mēs varam darboties ar iesaiņotajām īpašībām tāpat kā ar parastajām. Tas padara jūsu kodu kā Swift izstrādātājs kompaktāks un saprotamāks. Tajā pašā laikā tam ir vairāki ierobežojumi, kas mums jāņem vērā. Es ceru, ka daži no tiem tiks izlaboti nākamajās Swift versijās.

Ja vēlaties uzzināt vairāk par Swift īpašībām, izbraukšana oficiālie dokumenti .

Izpratne par pamatiem

Kas ir īpašuma iesaiņotājs Swift?

Īpašuma iesaiņojums ir vispārīga struktūra, kas iekapsulē piekļuvi īpašumam lasīšanas un rakstīšanas piekļuvei un pievieno tam papildu rīcību.

Kāpēc mums ir nepieciešami īpašuma ietinēji?

Mēs izmantojam rekvizītu iesaiņotājus, ja mums ir jāierobežo pieejamās rekvizītu vērtības, jāmaina lasīšanas / rakstīšanas piekļuve (piemēram, izmantojot DB vai citu krātuvi) vai jāpievieno dažas papildu metodes, piemēram, vērtību validācija.

Kurā Swift versijā ir @propertyWrapper anotācija?

@PropertyWrapper anotācija ir pieejama Swift 5.1 vai jaunākā versijā.

Kādi ierobežojumi ir iesaiņotājam?

Viņi nevar piedalīties kļūdu apstrādē, un vairāku iesaiņojumu izmantošana īpašumā nav atļauta.