Поиск…


Синтаксис

  • проект частного класса
  • let car = Car («Форд», модель: «Escape») // default internal
  • public enum Жанр
  • private func calculateMarketCap ()
  • переопределить внутреннюю функцию func setupView ()
  • private (set) var area = 0

замечания

  1. Основное замечание:

Ниже приведены три уровня доступа от наивысшего доступа (наименее ограничивающий) до самого низкого доступа (наиболее ограничительного)

Открытый доступ позволяет получить доступ к классам, структурам, переменным и т. Д. Из любого файла в модели, но, что более важно, вне модуля, если внешний файл импортирует модуль, содержащий общедоступный код доступа. Популярно использовать публичный доступ при создании фреймворка.

Внутренний доступ позволяет файлам только с модулем сущностей использовать сущности. По умолчанию все объекты имеют внутренний уровень доступа (за некоторыми исключениями).

Частный доступ запрещает использование объекта вне этого файла.

  1. Подкласс Замечание:

Подкласс не может иметь более высокий доступ, чем его суперкласс.

  1. Getter & Setter Примечание:

Если установщик свойств является приватным, то getter является внутренним (что является значением по умолчанию). Также вы можете назначить уровень доступа как для получателя, так и для сеттера. Эти принципы также применимы и к индексам

  1. Общее замечание:

Другие типы объектов включают: Инициализаторы, Протоколы, Расширения, Дженерики и Типовые Псевдонимы

Основной пример с использованием Struct

3.0

В Swift 3 есть несколько уровней доступа. В этом примере используются все, кроме open :

public struct Car {
    
    public let make: String
    let model: String //Optional keyword: will automatically be "internal"
    private let fullName: String
    fileprivate var otherName: String
    
    public init(_ make: String, model: String) {
        self.make = make
        self.model = model
        self.fullName = "\(make)\(model)"
        self.otherName = "\(model) - \(make)"
    }
}

Предположим, что myCar был инициализирован следующим образом:

let myCar = Car("Apple", model: "iCar")

Car.make (общедоступный)

print(myCar.make)

Эта печать будет работать везде, включая цели, которые импортируют Car .

Car.model (внутренний)

print(myCar.model)

Это будет скомпилировано, если код находится в той же цели, что и Car .

Car.otherName (fileprivate)

print(myCar.otherName)

Это будет работать, только если код находится в том же файле, что и Car .

Car.fullName (частный)

print(myCar.fullName)

Это не будет работать в Swift 3. Доступ к private свойствам возможен только в пределах одной и той же struct / class .

public struct Car {

    public let make: String       //public
    let model: String             //internal
    private let fullName: String! //private 

    public init(_ make: String, model model: String) {
        self.make = make
        self.model = model
        self.fullName = "\(make)\(model)"
    }
}

Если объект имеет несколько связанных уровней доступа, Swift ищет самый низкий уровень доступа. Если частная переменная существует в открытом классе, переменная все равно будет считаться закрытой.

Пример подкласса

public class SuperClass {
    private func secretMethod() {}
}
 
internal class SubClass: SuperClass {
    override internal func secretMethod() {
        super.secretMethod()
    }
}

Пример Getters и Setters

struct Square {
    private(set) var area = 0

    var side: Int = 0 {
        didSet {
            area = side*side
        }
    }
}

public struct Square {
    public private(set) var area = 0
    public var side: Int = 0 {
        didSet {
            area = side*side
        }
    }
    public init() {}
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow