According to the swift official documentation

”Access control rajoittaa pääsyä koodisi osiin muiden lähdekooditiedostojen ja moduulien koodista. Tämän ominaisuuden avulla voit piilottaa koodin toteutustiedot ja määrittää haluamasi käyttöliittymän, jonka kautta koodia voidaan käyttää ja käyttää.”

Swift 5: ssä on viisi kulunvalvontaa. Ne ovat avoimia, julkisia, sisäisiä, fileprivate ja yksityisiä. Nämä kulunvalvonnat määritellään moduulin ja lähdetiedoston käyttötarkoitusten perusteella. Tässä opetusohjelmassa opimme, mitä, missä ja miten käyttää kulunvalvontaa Swiftissä.

avoin (vähemmän rajoittava)

mikä tahansa avoimella määritelty voidaan käyttää moduulin sisällä tai ilman. open access-tason kokonaisuuksia voi käyttää mistä tahansa. Tämä tarkoittaa avoin muuttuja voi käyttää, Avoin toiminto voi ohittaa ja avoin luokka voi olla alaluokka sisällä moduulin ja ulkopuolella moduulin tuomalla että moduuli.

esimerkkinä on ”UITableViewCell” – Luokka UIKit-kehyksessä. Voimme subclass tahansa luokan UITableViewCell luokan tuomalla UIKit moduuli. Jos näet määritelmän ”UITableViewCell”, näet avoimen kulunvalvonnan ennen luokan määrittelyä UIKit-moduulin sisällä. Siksi voimme aliluokittaa minkä tahansa luokan UITableViewCell-luokaksi tuomalla UIKit.

@available(iOS 2.0, *)open class UITableViewCell : UIView, NSCoding, UIGestureRecognizerDelegate { }

public (restricting than open)

kuten open access, myös public entities on saatavilla moduulin sisällä tai sen ulkopuolella. Avoimella ja julkisella on kuitenkin suuri ero.

julkista luokkaa ei voi alittaa eikä julkista menetelmää voi ohittaa määritellyn moduulin ulkopuolelta. Täytyy aliluokka tai ohittaa moduulin sisällä, jossa ne määritellään.

tarkista alla oleva esimerkki

//module 1open class X{}
open func bar(){}public class Y{}
public func foo(){}//module 2class A: X{} // success
override func bar(){} // successclass B: Y{} //error
override func foo(){} // error

sisäinen ( moduulitason kulunvalvonta)

”sisäinen” mahdollistaa yksiköiden käytön missä tahansa määritellyn moduulin sisällä. ”sisäinen” on oletuskäyttötaso. Yleensä moduuli on kehys tai sovellus, jota voidaan käyttää yhtenä yksikkönä.

kohteen (moduulin) sisällä Kaikki yksiköt ovat oletusarvoisesti sisäisiä (jos ei ole nimenomaisesti määritelty mitään käyttöoikeuksien valvontaa). Se on määritelty siten, että kaikki moduulin sisällä voi käyttää kuka tahansa mistä tahansa moduulin sisällä.

fileprivate( file-level access control)

fileprivate entities on käytettävissä vain swift-tiedostossa. Swift-tiedostolla voi olla useita luokkia tai rakenteita. Kaikki tiedosto yksityiset yksiköt sisällä swift tiedosto voidaan käyttää kaikki luokat tai rakenteet kyseisessä tiedostossa. Ilman niitä muut luokat eivät pääse niihin käsiksi. Se yleensä piilottaa toteutuksen moduulin muista lähdetiedostoista.

//** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad() let a = A()
a.x()
a.z() //error let b = B()
b.Y() // error
}
}class A {fileprivate func x(){
print("Inside ViewController file")
}
}
//** SecondViewController.swift **//class B{fileprivate func Y(){
print("Outside ViewController file")
}
}extension A{
fileprivate func Z(){
print("Outside ViewController file, extension of A")
}
}

yksityinen( luokkatason kulunvalvonta)

yksityinen on käytetyin ja rajoitetuin kulunvalvonta. Yksityiset yksiköt voivat käyttää ainoastaan ilmoittamaansa luokkaa (laajennukset mukaan luettuina). Sitä käytetään yleensä piilottamaan sisäinen toteutus tai toiminnallisuus tietyn luokan ulkopuolelle.

// ** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
x()
let a = A()
a.Y() // error
}
}extension ViewController{
private func x(){
print("Inside x")
}
}class A {
private func Y(){
print("Inside Y")
}
}

swift access control

nyt näemme näiden eri parametreihin perustuvien access modifierin eron taulukkomuotona

onnittelut 🎉 🎉 🎉 luulen, että nyt sinulla on jonkinlainen käsitys kulunvalvonnasta Swift – ohjelmointikielellä. Niistä käydään lyhyt keskustelu swift official documentation-sivustolla.

jos tämä artikkeli on mielestäsi hyödyllinen, jaa ja anna taputuksia 👏 👏 👏
tarkista muut artikkelini mediumilla ja Yhdistä minut LinkedInissä.

Kiitos lukemisesta & onnellista koodausta 🙂

Vastaa

Sähköpostiosoitettasi ei julkaista.