programing

Xcode Playground가 Sources 폴더의 swift 파일에 액세스할 수 없음

codeshow 2023. 7. 31. 22:00
반응형

Xcode Playground가 Sources 폴더의 swift 파일에 액세스할 수 없음

방금 Xcode 6.3으로 업그레이드했는데 Playgrounds에 새로운 기능이 추가되었습니다.새 놀이터를 만들고 프로젝트 탐색기를 열면 Sources 폴더와 그 안에 SupportCode.swift 파일이 있습니다.그 파일의 맨 위에는 다음과 같이 쓰여 있습니다.

이 파일(및 이 놀이터의 소스 디렉터리에 있는 다른 모든 Swift 소스 파일)은 .playground에서 자동으로 사용할 수 있는 프레임워크로 사전 컴파일됩니다.

저는 거기에 기능을 넣으려고 시도했지만, 제 놀이터에서는 사용할 수 없습니다.내가 뭘 잘못하고 있는 거지?SupportCode.swift 파일을 수동으로 컴파일해야 합니까? 어떻게 합니까?

당신은 당신의 클래스, 메소드, 그리고 소스 폴더의 속성에 퍼블릭 액세스 속성을 추가해야만 컴파일러에 의해 별도의 모듈로 취급될 때 메인 플레이그라운드 파일에서 액세스할 수 있습니다.

운동장은 시험을 치르기에 좋습니다.모든 코드를 입력합니다.Sources디렉토리 및 각 테스트에 대해 공개적으로 액세스할 수 있는 '테스트' 클래스가 하나 있습니다.그런 다음 놀이터에서 공개적으로 액세스할 수 있는 테스트를 실행합니다.

playground

Test1.run()
Testx.run()
...

Sources/Test1.swift

public class Test1 {      
  public static func run() {
    let my_class = MyClass()
    let result = my_class.do_something()
    print(result)
  }
}

Sources/MyClass.swift

class MyClass {
  func do_something() -> String {
    return "lol"
  }
}

소스 폴더에 .swift 파일을 만들 때 언급한 것처럼 플레이그라운드 코드에서 자동으로 사용할 수 있습니다.이 파일의 다른 부분에 대한 액세스를 제어하려면 다음과 같은 액세스 수준 수정자를 사용할 수 있습니다.public,internal&private.

Swift 프로그래밍 언어 액세스 제어에 따라

대부분의 경우 기본 액세스 수준은 다음과 같습니다.internal모듈 내부에서는 액세스할 수 있지만 외부에서는 액세스할 수 없습니다.

즉, 액세스 한정자가 없는 클래스를 선언하면 소스 폴더의 다른 파일에서 액세스할 수 있지만 플레이그라운드의 기본 파일에서는 액세스할 수 없습니다.반면에 공개 수식자가 있는 클래스를 선언하면 두 경우 모두 액세스할 수 있습니다.

실용적인 사용을 위해: 싱글턴 구현을 먼저 만들자: 소스 폴더에 다음 코드를 사용하여 'Singy.swift'라는 새 파일을 만듭니다.

public class Singy {
    public var name = ""
    private static var instance: Singy?
    private init() {}

    public static func getSingy() -> Singy {
        if Singy.instance == nil {
            Singy.instance = Singy()
        }
        return Singy.instance!
    }
}

두번째: 나의 놀이터에서

var s1 = Singy.getSingy()
var s2 = Singy.getSingy()
s1.name = "One"
print(s2.name)

둘다요.s1그리고.s2동일한 인스턴스를 참조하지만 클래스 내에서만 생성됩니다.

언급URL : https://stackoverflow.com/questions/29637444/xcode-playgrounds-cant-access-swift-files-in-sources-folder

반응형