2015-02-05 2 views
-1

기본적으로 Person 및 Person의 애완 동물을위한 클래스를 구현하려고합니다. 아주 간단에서 폼 Person 클래스 및 애완 동물 클래스는 다음과 같이 될 것이다 : 일대 다 관계의 클래스 구조 구현. Swift

class Person { 
    var email : String! 
    var name : String! 
    var pets : [Pet]! 

    init(userName: String) { 
     email = userName 

     // load Person from CloudKit database 
    } 
} 

class Pet { 
    var name : String! 
    var breed : String? 
} 

가 지금은 특정 사용자 이름과 관련된 모든 애완 동물을로드 할 수 있어야합니다. 내가 위의 클래스를 가지고 있다면, 그것은 오직 하나의 애완 동물 만 가지고 있습니다. Person 클래스와 같은 배열을 만들면 Load 메서드가 없습니다. 문제는 다음과 같은 새로운 수업을 만들어야한다는 것입니다.

class Pets { 
    var userName : String 
    var pets  : [Pet] 

    init(email: String) { 
     // load all pets related to user here 
    } 
} 

의미가 있습니까? 아니면 클래스를 구성하는 더 좋은 방법이 있습니까? 제 질문이 충분히 명확합니까? 사전에 도움을 주셔서 감사합니다.

+0

나는 그것이 의미가있는 것 같아 – lascort

+0

'var init','String!'모든 곳에서'email = userName', 이것은별로 의미가 없습니다. 나를. 나는 당신이'func findPetsOf (userName : String, inContacts contacts : [Person]) -> [Pet]?'와 같은 것을 원한다고 가정 할 것이다. 추가 수업이 필요 없습니다. 최악의 경우, 튜플'(userName : String, pets : [Pet]?)'을 반환하도록 만듭니다. –

+0

'var init'은 오타였습니다. 진짜 수업은 이것보다 훨씬 길다. 토론을 위해 여기에서 마른 버전을하려고했습니다. 의사 코드로 간주 할 수 있습니다. findPetsOf 함수는 어디에 위치합니까? Person 클래스 내부? 그렇다면, 당신은 애완 동물의 모든 로딩 및 저장 로직이 Person 클래스 내에서 처리되어야한다고 말하고 있습니다. 나 맞아? – oyalhi

답변

0

내 데이터 모델에 대해 클래스가 아닌 구조체를 사용하고 싶습니다. Structs and Classes

필자는 정말로 선택의 여지가없는 한 선택 사항을 사용하지 않을 것이며, 필요한 경우가 몇 가지 있습니다. 나는 암시 적으로 unwrapped 옵션을 전혀 사용하지 않을 것입니다 ... 즉! 그것은 이유에 대한 '느낌표'입니다. 다른 유형의 선택 사항을 사용할시기에 대해 읽어야합니다. Why create implicitly unwrapped optionals

나는 당신이 만든 것처럼 Pets 클래스가 없습니다. 이 모든 것이 데이터베이스에 저장되어 쿼리 될 수 있습니다. 아마도 핵심 데이터이거나 데이터를 보유 할 다른 클래스가 있으면 [String : [Pet]]의 사전 /지도 일 것입니다. 그 사전 /지도에서 사용자 이름에 대한 모든 애완 동물

+0

CloudKit을 사용하고 있으며 실제로 내 제안이 의미가 있습니다. 간단히 문자열 배열의 새로운 필드를 만들고 Person 테이블 안에 애완 동물을 저장합니다. 선택 사양이 제공되는 한, 내가 제공 한 코드는 의사 코드가 될 수도 있습니다. 그러나, 나는 선택 사항들에 대해서 더 많이 읽을 것이다. 고맙습니다. – oyalhi