2017-12-14 18 views
1

클라이언트에서 모델 객체를 초기화하길 원하지만 문제는 내가 필요한 속성이 다섯 개의 뷰 컨트롤러에 위치한다는 것입니다. 뷰 컨트롤러 1에서 my object에 대해 propertyA를 정의합니다. View controller 2 propertyB 등을 정의합니다. 최종보기에서 나는 내가 선택한 것을 요약해서보고 그곳에서 마침내 내 물건을 만들 수 있습니다.Swift - 여러 뷰에서 속성을 사용하여 모델 객체 초기화

많은보기에서 각 속성에 대해 동일한 선택적 변수가있는 지금은 매우 길고 비효율적입니다. 어떤 도움이라도 좋을 것입니다.

+0

어떤 종류의 데이터를 말하고 있습니까? 싱글 톤이거나 모든 뷰보다 오래 걸리는 클래스에 의해 유지되는 일종의 관리자 클래스에서 벗어날 수있는 것처럼 들리므로 모든 뷰의 뷰 모델이 동일한 인스턴스를 수정할 수 있습니다. – Dare

+0

모든보기에 속성이 필요합니까? 그렇다면, 왜 당신은 baseclass가 없습니까? 나는 당신의 질문이 충분히 구체적이지 않다는 것을 알게되고, 따라서 그것은 코드 구조의 기초에 관한 것 같다. –

+0

@Dare 그냥 Strings, Int 's 및 Doubles 일뿐입니다. 나는 관리자에 대한 조언을하려고합니다. 내가 취할 수있는 접근법은 내 모델과 일치하는 선택적 속성으로 클래스를 만들고 싱글 톤을 통해 업데이트하려고 시도하는 것입니다. 그게 효과가 있니? – Breezy

답변

1

이 시나리오의 모든 특성을 갖는 클래스를 생성 싱글 톤 패턴을

  1. 을 시도하고 또한 싱글을 만들어야합니다

    public class Property { 
        public var propertyA:AnyObject? /// define your appropriate data type 
        public var propertyB:AnyObject? 
        public var propertyC:AnyObject? 
        public var propertyD:AnyObject? 
        public var propertyE:AnyObject? 
        static let sharedInstance = Property() 
    } 
    
  2. 패턴 아래 서로 다른 두 뷰 컨트롤러의 추적에 값을 설정하려면 . 여기 뷰 컨트롤러에서 속성을 설정할 수 있다고 가정합니다. 지금 나는 당신이보기 컨트롤러의 어떤 부분에 값을 변경할 수 있습니다 viewDidLoad으로 고려하고

    class ViewController1: UIViewController { 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         Property.sharedInstance.propertyA = "X" as AnyObject //// Value should be of same data type of propertyA 
        } 
    } 
    
    class ViewController2: UIViewController { 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         Property.sharedInstance.propertyB = "Y" as AnyObject //// Value should be of same data type of propertyA 
        } 
    } 
    

  3. 마침내 끝에서 당신은 할당 된 모든 매개 변수의 값

    print(Property.sharedInstance.propertyA) 
    print(Property.sharedInstance.propertyB) 
    print(Property.sharedInstance.propertyC) 
    print(Property.sharedInstance.propertyD) 
    print(Property.sharedInstance.propertyE) 
    
을 얻을 것이다
+0

@rob and jeetendra 나는 그것을 한 번 줄 것이다! 하지만 나는 1에 대한 질문이 있습니다. ** 공개 클래스와 공용 변수를 사용하는 이유는 무엇입니까? ** 나는 공용 액세스의 유무에 관계없이 액세스 가능성을 허용하는 싱글 톤을 가정했습니다. – Breezy

+1

프로젝트에 여러 모듈 또는 프로젝트 종속성이 있고 다른 모듈 (자체 모듈 제외)에서 액세스하려는 경우 공개가 없으면 클래스 및 해당 속성에 액세스 할 수 없습니다. 프로젝트에서 단일 모듈이 공개가 필요없는 경우 –

+0

단일 모듈 프로젝트가 작동합니다. 클래스 속성 { var propertyA : AnyObject? var propertyB : AnyObject? var propertyC : AnyObject? var propertyD : AnyObject? var propertyE : AnyObject? 정적 let sharedInstance = Property() } –