전역 변수를 만드는 방법은 무엇입니까?


123

내 ViewController간에 공유해야하는 전역 변수가 있습니다.

Objective-C에서는 정적 변수를 정의 할 수 있지만 Swift에서 전역 변수를 정의하는 방법을 찾을 수 없습니다.

그것을하는 방법을 알고 있습니까?




클래스 외부에서 변수 또는 구조체를 정의하면 전체 응용 프로그램에서 해당 변수에 액세스 할 수 있습니다.
Chandni

답변:


209

공식 Swift 프로그래밍 가이드에서 :

전역 변수는 함수, 메서드, 클로저 또는 유형 컨텍스트 외부에서 정의 된 변수입니다. 전역 상수와 변수는 항상 느리게 계산됩니다.

모든 파일에서 정의 할 수 있으며 현재 module어디서나 액세스 할 수 있습니다 . 따라서 범위 밖의 파일 어딘가에 정의 할 수 있습니다. 필요가 없으며 static모든 전역 변수가 느리게 계산됩니다.

 var yourVariable = "someString"

현재 모듈의 어느 곳에서나 액세스 할 수 있습니다.

그러나 전역 변수는 응용 프로그램 상태 및 주로 버그의 원인에 좋지 않기 때문에 이것을 피해야합니다.

답변 에서 볼 수 있듯이 Swift에서 캡슐화하고 struct어디서나 액세스 할 수 있습니다. Swift에서도 정적 변수 또는 상수를 정의 할 수 있습니다. 캡슐화struct

struct MyVariables {
    static var yourVariable = "someString"
}

이 변수는 모든 클래스 또는 어디서나 사용할 수 있습니다.

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
귀하의 구조체가 호출 MyVariables되었으므로 stackoverflow.com/a/24868789/1187415MyViewState 에서 복사 / 붙여 넣기 오류처럼 보입니다. :)
Martin R

감사합니다 Martin R. 네, 코드를 복사했습니다
codester 2014 년

9
다른 답변에서 코드를 복사하는 경우이를 명시 적으로 명시해야합니다 (원래 답변에 대한 링크 포함). stackoverflow.com/help/referencing을 비교하십시오 .
Martin R

1
알겠습니다, 감사합니다! 그러나 전역 변수와 구조체 캡슐화 사이에 다른 점이 있습니까?
czzhengkw 2014 년

3
"MyVariables"는 글로벌로 간주되지 않습니까? 전역 구조체 또는 변수로 선언하면 어떻게 차이가나요?
Satyam

15

메서드 또는 클로저 외부에 정의 된 전역 변수는 private 키워드를 사용하여 범위를 제한 할 수 있습니다.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

32
상수 ( "let")는 변수가 아닙니다.
Mike Taverne

2
@MikeTaverne 당신이 맞지만 "var"로 소개 할 수 있습니다. 그러면이 대답은 괜찮을 것입니다. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

모든 수업에서 사용하려면 다음을 사용할 수 있습니다.

public var yourVariable = "something"

한 클래스에서만 사용하려면 다음을 사용할 수 있습니다.

var yourVariable = "something"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.