2014-09-23 2 views
0

저는 CALayers를 사용하고 속성에서 애니메이션을 수행하는 방법을 배우고 있습니다. 초보자에게 Apple의 문서는 단순한 암호입니다. 아이폰 OS의 문서에 어느 정도 내가 원하는 일을하는 방법을 '설명' enter image description hereSwift에서 CALayer의 initWithLayer를 오버라이드합니다.

: 그러나 몇 가지 오류가 나에게 제공

// For CALayer subclasses, always support initWithLayer: by copying over custom properties. 
-(id)initWithLayer:(id)layer { 
    if((self = [super initWithLayer:layer])) { 
     if ([layer isKindOfClass:[BulbLayer class]]) { 
      self.brightness = ((BulbLayer*)layer).brightness; 
     } 
    } 
    return self; 
} 

가 스위프트의 방법 재정의를 번역 : 나는 (CustomAnimatableProperty라고 함) 예를 찾을 관리

여기에 무슨 일이 일어나고 있는지에 대한 나의 부족한 이해 때문에 오류가 발생합니다. 우리는 그 중첩 if 문에서 무엇을 검사 할 지 확신하지 못합니다. 또한 나는 주 if() {} 블록에서 "="의 사용에 약간 당황 스럽다. 우리가 평등을 위해 점검해야하지 않습니까 ("==")?

하지만 일반적인 도움은 세상을 의미합니다. 몇 가지 블로그 게시물/자습서를 온라인에서 검토하려고 시도했지만,이 특정 문제는 다루지 않습니다.

답변

6

self = [super init...] 관용구는 Swift가 아닌 Objective-C 용입니다. Swift에서 init 블록은 정상적인 함수가 아니며 아무 것도 반환하지 않습니다.

우리는 여기에있는 동안 다운 캐스팅을 위해 신속 숙어를 사용합시다. super.init을 호출하기 전에 size이 초기화되도록 보장해야합니다.

override init(layer: AnyObject!) { 
    if let layer = layer as? SegmentActiveLayer { 
     size = layer.size 
    } else { 
     size = 0 
    } 
    super.init(layer: layer) 
} 
+0

고마워요 선생님! –

관련 문제