volgens de officiële swift-documentatie

” Toegangscontrole beperkt de toegang tot delen van uw code uit code in andere bronbestanden en modules. Met deze functie kunt u de implementatiedetails van uw code verbergen en een voorkeursinterface opgeven waarmee deze code kan worden geopend en gebruikt.”

Swift 5 heeft vijf Toegangscontrole. Ze zijn open, openbaar, intern, fileprivate en privé. Deze toegangscontroles worden gedefinieerd op basis van het gebruik in het module-en bronbestand. In deze tutorial leren we wat, waar en hoe toegangsbeheer te gebruiken in swift.

open (minder restrictief)

alles wat gedefinieerd is met open kan worden benaderd binnen of zonder de module. entiteiten op Open access-niveau kunnen overal worden benaderd. Dat betekent dat een open variabele toegang heeft, een open functie kan overschrijven en open klasse kan subklasse zijn binnen een module en buiten een module door die module te importeren.

een voorbeeld is de” UITableViewCell ” klasse in het UIKit framework. We kunnen elke klasse subclasseren als een UITableViewCell klasse door de UIKit module te importeren. Als je de definitie van “UITableViewCell” ziet, zie je open access control voor de class definitie in de UIKit module. Daarom kunnen we elke klasse subclasseren als een UITableViewCell klasse door UIKit te importeren.

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

publiek (restrictive than open)

net als open access zijn ook openbare entiteiten toegankelijk binnen of buiten een module. Maar er is een groot verschil tussen open en openbaar.

public class kan niet worden gesubclasseerd en public method kan niet worden overschreven buiten de gedefinieerde module. Moet moeten subklassen of overschrijven binnen de module waar ze gedefinieerd.

controleer het voorbeeld hieronder

//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

internal (Module-Level access control)

internal laat het gebruik van entiteiten overal binnen de gedefinieerde module toe. “intern” is het Standaard toegangsniveau. Normaal gesproken is een module een framework of app die kan worden gebruikt als een enkele eenheid.

binnen een doel (module) zijn alle entiteiten standaard intern (indien expliciet Geen Toegangscontrole gedefinieerd werd). Het is zo gedefinieerd dat alles in de module toegankelijk is voor iedereen van overal binnen die module.

fileprivate (toegangscontrole op bestandsniveau)

fileprivate entiteiten kunnen alleen toegankelijk zijn in een swift-bestand. Een swift-bestand kan meerdere klassen of structuren hebben. Alle bestanden in een swift-bestand zijn toegankelijk voor alle klassen of structuren in dat bestand. Zonder hen, kunnen alle andere klassen buiten dat bestand geen toegang tot hen. Het verbergt over het algemeen de implementatie van andere bronbestanden van de module.

//** 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")
}
}

private (class-level access control)

private is de meest gebruikte en meest beperkte Toegangscontrole. De privé-entiteiten hebben alleen toegang tot de klasse (inclusief extensie) die zij hebben opgegeven. Het wordt over het algemeen gebruikt om de interne implementatie of functionaliteit buiten een specifieke klasse te verbergen.

// ** 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")
}
}

verschil tussen swift access control

nu zullen we het verschil zien tussen deze access modifier gebaseerd op verschillende parameters als een tabelvorm

felicitatie Congrat ik denk dat je nu een idee hebt over toegangscontrole in de Swift-programmeertaal. U vindt een korte bespreking van hen op swift officiële documentatie.

als u dit artikel nuttig vond, deel en geef dan wat klappen 👏 👏 👏
controleer mijn andere artikelen op medium en verbind me op LinkedIn.

Bedankt voor het lezen & Gelukkig coderen 🙂

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.