분할보기 컨트롤러를 초기보기 컨트롤러로 사용하여 프로젝트를 시작하고 스토리 보드에서 자동으로 시작합니다.
일반적으로이 UI를 사용하는 앱에는 루트로 분할보기 컨트롤러 가 하나만 있으므로 하위 클래스에 정적 변수 를 만들고 초기화가 완료 될 때 설정합니다.
그래서 나는이 행동을 신속하게 시도하고 싶습니다.
유형 속성 (정적 및 클래스 키워드 포함)에 대한 iBook의 Swift 프로그래밍 언어 가이드 북을 읽고 작업에 대한 코드를 시도했습니다.
import UIKit
class SplitViewController: UISplitViewController {
class func sharedInstance() -> SplitViewController {
return SplitViewController.instance
}
class let instance: SplitViewController = nil
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.initialization()
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder);
self.initialization()
}
func initialization() {
SplitViewController.instance = self;
}
}
그러나 Xcode가 유형 속성에 대한 클래스 키워드가 아직 지원되지 않는다고 말할 때 알아 냈습니다.
이 작업을 수행 할 솔루션이 있습니까?
답변
Swift는 이제 클래스에서 정적 변수를 지원합니다. 이것은 클래스 변수와 정확히 같지는 않지만 (하위 클래스에 의해 상속되지 않기 때문에), 꽤 가깝습니다.
class X {
static let y: Int = 4
static var x: Int = 4
}
println(X.x)
println(X.y)
X.x = 5
println(X.x)
답변
구조체 포함은 해결 방법으로 잘 작동 할 수 있습니다.
class SomeClass
{
// class var classVariable: Int = 0
// "Class variables not yet supported." Weird.
// Workaround:
private struct SubStruct { static var staticVariable: Int = 0 }
class var workaroundClassVariable: Int
{
get { return SubStruct.staticVariable }
set { SubStruct.staticVariable = newValue }
}
}
SomeClass.workaroundClassVariable 계산 된 유형 속성은 저장된 유형 속성 인 것처럼 사용할 수 있습니다.
답변
파일 범위 (C에서와 같이)에서 정적 저장 기간으로 변수를 선언 할 수있는 것 같습니다.
var sharedInstance: SplitViewController? = nil
class SplitViewController: UISplitViewController {
....
func initialization() {
sharedInstance = self
}
}
답변
내가 선호하는 방법은 클래스 외부에서 개인 파일 범위 var를 사용한 다음 클래스 / 정적 getter 및 setter를 구현하는 것입니다.
private var _classVar: Int = 0;
class SomeClass
{
public class var classVar: Int
{
get { return _classVar }
set { _classVar = newValue }
}
}
답변
Swift 1.2 (Xcode 6.3b1 이상에서 사용 가능)부터 static
클래스 속성 및 메서드가 지원됩니다.
class SomeClass
{
static var someVariable: Int = 0
}
답변
답변
파일 범위에서 var와 충분히 유사하지만 사용자 정의가 가능하고 단일에 가까운 해결책은 정적 var를 클래스의 속성으로 지원하는 구조체를 사용하는 것입니다.
struct PersonSharedData {
static var backstore = ""
var data: String {
get { return PersonSharedData.backstore }
set { PersonSharedData.backstore = newValue }
}
}
class Person {
var shared=PersonSharedData() //<< pseudo class var
var family: String {
get { return shared.data }
set { shared.data=newValue }
}
var firstname = ""
var lastname = ""
var sexe: Sexe = .Unknown
}