2017-11-24 2 views
1

바르 경우 UIView의가 NSCoding의 protocal에서 더 이상 부모의 생성자를 상속하지 않습니다 그것을 사용자 정의 생성자를 사용하여 상속 있기 때문에입니다.이 클래스가 초기화를 구현해야하지 않는 이유사용자 정의 UIView 하위, 코더 : 인스턴스를 사용하는 것은 내가 (당신의 자신의 생성자를 만들려고 할 때 (생성자 초기화를 구현하는 UIView의의 코더 :) 필요 이유에 대한 여러 글을 읽었습니다

내 질문은 (코더 :

import UIKit 

class CardView: UIView { 

    @IBInspectable var cornerRadius : CGFloat = 3.0 

    // layoutSubviews is called when view is created 
    override func layoutSubviews() { 
     layer.cornerRadius = cornerRadius 

     layer.masksToBounds = true // Set the false to see shadows. TODO: Figure out how to clip subviews and allow a shadow 

     layer.shadowOffset = CGSize(width: 0, height: 3) 
     layer.shadowColor = UIColor.black.cgColor 
     layer.shadowRadius = 9.0 
     layer.shadowOpacity = 0.12 
    } 

} 

이 클래스는 수행 할 때 :

(210)

나는 CardView 클래스하지 않는 경우 ColorView®의 클래스는 이제 생성자를 필요로하는 기술적 인 이유를 찾고 있어요.

답변

2

Swift에서 클래스를 초기화하려면 초기화시 모든 저장된 속성에 기본값을 지정했는지 또는 옵션으로 선언했는지 확인해야합니다.

로 선택 수단을 선언함으로써, 기본 값은 초기화시 무기 호입니다입니다.

는 그래서 CardView에 하나 개의 저장 특성 "CornerRadius를"거기 당신은 기본값 3.0을주었습니다. 따라서 init (코더)가 필요하지 않습니다.

ColorView 클래스에는 하나의 저장 속성 "color"만 있으며 값을 지정하거나 선택 사항으로 선언하지 않았습니다. 그래서 init (코더 :)가 필요합니다.

2

ColorViewcolor에 대한 모든 초기화 또는 디폴트 값을 제공하지 않기 때문입니다. var 정의를 예를 들어로 변경하면 var color = UIColor.black 초기화 프로그램 요구 사항이 사라집니다.

+0

또는 속성 유형을 선택 사항으로 지정하십시오. 'var color : UIColor?' –