반응형
Swift의 정적 함수 변수
Swift의 함수에 로컬로만 범위가 정적 정적 변수를 선언하는 방법을 알아 내려고합니다.
C에서는 다음과 같이 보일 수 있습니다.
int foo() {
static int timesCalled = 0;
++timesCalled;
return timesCalled;
}
Objective-C에서는 기본적으로 동일합니다.
- (NSInteger)foo {
static NSInteger timesCalled = 0;
++timesCalled;
return timesCalled;
}
그러나 나는 Swift에서 이와 같은 것을 할 수 없습니다. 다음과 같은 방법으로 변수 선언을 시도했습니다.
static var timesCalledA = 0
var static timesCalledB = 0
var timesCalledC: static Int = 0
var timesCalledD: Int static = 0
그러나 이것들은 모두 오류를 초래합니다.
- 첫 번째는 "정적 속성은 선택할 수 없습니다"라고 불평합니다.
- 두 번째 ( "예상 선언"불평
static
하다) 및 "예상 된 패턴"(여기서,timesCalledB
임) - 세 번째는 "행의 연속 문은 ';'(콜론과 사이의 공백
static
) 및"예상 유형 "(여기서는static
)으로 구분되어야합니다. - 네 번째는 "한 줄의 연속 문은 ';'(
Int
와 사이 의 공백static
) 및"예상 선언 "(등호 아래)으로 구분되어야합니다.
Swift는 클래스 / 배열에 연결하지 않고 정적 변수를 지원 생각하지 않습니다. 정적 변수로 개인을 선언하십시오.
func foo() -> Int {
struct Holder {
static var timesCalled = 0
}
Holder.timesCalled += 1
return Holder.timesCalled
}
7> foo()
$R0: Int = 1
8> foo()
$R1: Int = 2
9> foo()
$R2: Int = 3
또 다른 해결책
func makeIncrementerClosure() -> () -> Int {
var timesCalled = 0
func incrementer() -> Int {
timesCalled += 1
return timesCalled
}
return incrementer
}
let foo = makeIncrementerClosure()
foo() // returns 1
foo() // returns 2
Xcode 6.3이 포함 된 Swift 1.2는 이제 예상대로 정적을 지원합니다. Xcode 6.3 베타 릴리스 정보에서 :
이제 "정적"메서드와 속성이 클래스에서 허용됩니다 ( "클래스 최종"의 별칭으로). 이제 전역 저장소가 있고 처음 액세스 할 때 (전역 변수와 같이) 느리게 초기화되는 클래스에서 정적 저장된 속성을 선언 할 수 있습니다. 이제 프로토콜은 유형 요구 사항을 "클래스"요구 사항으로 선언하는 대신 "정적"요구 사항으로 선언합니다. (17198298)
함수는 (질문에서 묻는 것처럼) 정적 선언을 포함 할 수 없습니다. 대신 클래스 수준에서 선언해야합니다.
클래스 함수가 필요하지 않더라도 클래스 (정적) 함수 내에서 증가하는 정적 속성을 보여주는 간단한 예 :
class StaticThing
{
static var timesCalled = 0
class func doSomething()
{
timesCalled++
println(timesCalled)
}
}
StaticThing.doSomething()
StaticThing.doSomething()
StaticThing.doSomething()
산출:
1
2
3
또 다른 해결책
class Myclass {
static var timesCalled = 0
func foo() -> Int {
Myclass.timesCalled += 1
return Myclass.timesCalled
}
}
참고 URL : https://stackoverflow.com/questions/25354882/static-function-variables-in-swift
반응형
'IT' 카테고리의 다른 글
Go에서 HTTP 응답에 노드로 액세스 (0) | 2020.09.09 |
---|---|
C ++에서 부스트를 사용하여 UUID 생성의 예 (0) | 2020.09.09 |
어디에서 특정 문자 자르기 (0) | 2020.09.09 |
Xcode 9에서 분기 전환 (0) | 2020.09.09 |
PreferenceFragment 내에서 기본 설정 변경을 수신하는 방법은 무엇입니까? (0) | 2020.09.09 |