Swiftのアクセスコントロールを試してみた


今話題の アクセスコントロール(public/pirvate)を試してみた。

開発環境は、XCode6-Beta4 (2014/7/23時点)

最初、Playgroundにて、サンプルコードを記述してみたが、privateなプロパティやメソッドに、みんなアクセスできてしまった。

Declaration.playground

ということで、実際、UIViewControllerを使用して自作クラスの、privateなプロパティやメソッドにアクセスしてみた。

DeclarationSample

MyDeclaration.swift
import Foundation

class MyDeclaration{

    private var valPrivate:String = "Private Value"
    public var valPublic:String = "Public Value"

    private func myPrivateFunc(){
        NSLog("Private Function executed!!")
    }

    public func myPublicFunc(){
        NSLog("Public Function executed!!")
    }
}
ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


        var myClass:MyDeclaration = MyDeclaration()

        //Public Function
        myClass.myPublicFunc()

        //Set Public Property
        myClass.valPublic = "Set New Public Value!!"

        //Get Public Property
        NSLog("myClass.valPublic:%@", myClass.valPublic)


        //Private Function
        //myClass.myPrivateFunc()

        //Set Private Property
        //myClass.valPrivate = "Set New Private Value!!"

        //Get Private Property
        //NSLog("myClass.valPrivate:%@", myClass.valPrivate)

 }
}

以下のように、仕様の通りに外部からアクセスできないので、事前にエラーとなる。

ちなみに、当然、同一クラス内からはprivate関数はコール可能。

MyDeclaration.swift
class MyDeclaration{

    private var valPrivate:String = "Private Value"
    public var valPublic:String = "Public Value"

    private func myPrivateFunc(){
        NSLog("Private Function executed!!")
    }

    public func myPublicFunc(){
        //同一クラス内からはコール可能
        myPrivateFunc()
    }
}

Java出身の自分としては、C言語系のヘッダファイル等によるスコープ管理は非常に難解であったので、とてもわかりやすくなって嬉しい。

ちなみに、XCode6-Beta4になってからもコードアシスト機能が、更に実用的になってきて素晴らしい。今後、SwiftもXcodeも進化していくことを期待している。

Lovely!!