Skip to content

erica/AccessControlTestpad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Access Control Examples

####Examples from "Swift 2 to 3" by Erica Sadun
Available from iTunes and LeanPub

Basic Control Keywords

// Default is internal
struct MyType {
    let member: String = "Member" // default is internal
    fileprivate let filemember: String = "FileMember"
    private let privatemember: String = "PrivateMember"
    internal let internalmember: String = "InternalMember"
    public let publicmember: String = "PublicMember"
    public init() {}
}

private struct MyPrivateType {
    let member: String = "Member" // default is internal
    fileprivate let filemember: String = "FileMember"
    private let privatemember: String = "PrivateMember"
    internal let internalmember: String = "InternalMember"
    public let publicmember: String = "PublicMember"
    public init() {}
}

fileprivate struct MyFilePrivateType {
    let member: String = "Member" // default is internal
    fileprivate let filemember: String = "FileMember"
    private let privatemember: String = "PrivateMember"
    internal let internalmember: String = "InternalMember"
    public let publicmember: String = "PublicMember"
    public init() {}
}

internal struct MyInternalType {
    let member: String = "Member" // default is internal
    fileprivate let filemember: String = "FileMember"
    private let privatemember: String = "PrivateMember"
    internal let internalmember: String = "InternalMember"
    public let publicmember: String = "PublicMember"
    public init() {}
}

public struct MyPublicType {
    let member: String = "Member" // default is internal
    fileprivate let filemember: String = "FileMember"
    private let privatemember: String = "PrivateMember"
    internal let internalmember: String = "InternalMember"
    public let publicmember: String = "PublicMember"
    public init() {}
}
TypeScopeVisibilityOutside of TypeIn Type Extension
All five typesSame fileCan create instances`privatemember`: inaccessible due to 'private' protection level`privatemember` is unresolved identifier
MyType, MyInternalType, and MyPublicTypeSame module, different fileCan create instances`privatemember` and `filemember`: inaccessible due to 'private' protection level`privatemember` and `privatemember` are unresolved identifiers
MyFilePrivateType and MyFilePrivateTypeSame module, different fileUndeclared typesN/AN/A
MyPublicTypeExternal to moduleCan create instancesCan access `publicmember` but no other members`publicmember` is visible
MyFilePrivateType, MyPrivateType, MyType, MyInternalTypeExternal to moduleUndeclared typesN/AN/A

Open vs Public Classes and Members

public class PublicClass {
    public let propertyPublic = "PublicMember"
    public func actionPublic() {}
    open let propertyOpen = "PublicMember"
    open func actionOpen() {}
}

open class OpenClass {
    public let propertyPublic = "PublicMember"
    public func actionPublic() {}
    open let propertyOpen = "PublicMember"
    open func actionOpen() {}
}
TypeScopeActions
OpenClass and Public ClassSame Module, Any FileCan subclass and override methods
OpenClassExternal to ModuleCan subclass and override open methods.
Cannot override non-open methods outside defining module
Public ClassExternal to ModuleCannot subclass or override from non-open class outside defining module

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages