iOS의 싱글 톤 클래스에서 배열 사용

코미 어

PetInfo.class

class PetInfo {

    static let shared: PetInfo = PetInfo()

    lazy var petArray: [PetInfo] = []
    var PetID:Int
    var PetName:String
    ...

    init(){ .. }
}

ViewController.swift

class ViewController: UIViewController {

    var PetArray = PetInfo.shared.petArray

    override func viewDidLoad() {
        super.viewDidLoad()

        let pet = PetInfo() 
        pet.PetName = "Jack"
        PetArray.append(pet).        **Create Object and gave a name**


        print(PetArray[0].PetName) //works!

    }
}

secondViewController.swift

class secondViewController: UIViewController {

    var PetArray = PetInfo.shared.petArray

    override func viewDidLoad() {
        super.viewDidLoad()

        let label: UILabel = {
        let label = UILabel()
        ...
        label.text = PetArray[0].PetName    **tried to print**
        return label
    }()
    
    view.addSubview(label)
    
    }
}

모든 뷰 컨트롤러에서 PetArray 배열을 공유하고 싶습니다. (2 개 이상입니다.) 첫 번째 VC에 데이터를 넣었지만 두 번째 VC에서는 작동하지 않습니다. 싱글 톤 패턴을 사용하여이 배열을 공유하려면 어떻게해야합니까? 배열을 제외하고는 완벽하게 작동합니다. (예 : String .. PetID, PetName ..)

산딥 반 다리

Swift의 Array는 Struct로 구현됩니다. 즉, Array는 참조 유형이 아니라 값 유형입니다. Swift의 값 유형은 COW (Copy on Write) 메커니즘을 사용하여 값 변경을 처리합니다.

그래서 ViewController당신이 할당했을 때

var PetArray = PetInfo.shared.petArray

당신 PetArray은 여전히 ​​당신의 PetInfo.shared인스턴스 에서 동일한 배열을 가리키고있었습니다 (내 말은 메모리에있는 배열의 동일한 복사본을 의미합니다). 그러나 PetArray사용하여 값을 수정하자마자

PetArray.append(pet)

COW가 시작되고 petArray메모리에 새 복사본을 만들고 이제 PetArrayViewController에 변수를 만들고 PetInfo.shared.petArray더 이상 동일한 인스턴스를 가리 키지 않고 대신 메모리에있는 두 개의 다른 배열 복사본을 가리 킵니다.

따라서 사용하여 수행 한 모든 변경 사항 PetArray.append(pet)은 액세스 할 때 분명히 반영되지 않습니다 PetInfo.shared.petArray.secondViewController

어떡해?

제거 PetArray.append(pet)하고 대신 사용PetInfo.shared.petArray.append(pet)

내 코드의 다른 문제는 무엇입니까?

문제 1 :

변수 이름에 Pascal 대 / 소문자사용하지 var PetArray = PetInfo.shared.petArray말고 대신 낙타 대 / 소문자 를 사용하십시오. var petArray = PetInfo.shared.petArray

문제 2 :

class PetInfo {

    static let shared: PetInfo = PetInfo()

    lazy var petArray: [PetInfo] = []
    var PetID:Int
    var PetName:String
    ...

    init(){ .. }
}

이 구현은 PetInfo메모리 존재하는 인스턴스가 하나만 있음을 보장하지 않습니다 (순수한 싱글 톤 패턴을 보장 할 수 없음을 의미 함).하지만 PetInfo정적 변수 사용하는 인스턴스에 대한 액세스를 제공하더라도 shared사용자가 PetInfo단순 인스턴스를 여러 개 만드는 것을 막을 수는 없습니다. PetInfo()당신이했던 것처럼 전화 하여let pet = PetInfo()

차라리 private init(){ .. }다른 사람들이PetInfo

문제 3 :

당신 은 일종의 엉망인 패턴 PetInfo의 인스턴스 내부 배열을 들고 있습니다. PetInfo여기서 무엇을 성취하려고하는지 확실하지 않습니다. 이것이 정말로 당신이하고 싶은 일이라면 아마도 두 번째 점을 무시할 수 있습니다. 지금은 private init) :)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SDWebImage에 싱글 톤 사용

분류에서Dev

싱글 톤 클래스 사용

분류에서Dev

세 클래스에서 사용되는 싱글 톤 패턴

분류에서Dev

C # 싱글 톤 사전 클래스

분류에서Dev

Java의 싱글 톤 클래스 이해

분류에서Dev

싱글 톤 클래스의 수명

분류에서Dev

서블릿의 싱글 톤

분류에서Dev

싱글 톤 클래스에서 초기화 한 후 배열이 nil입니다.

분류에서Dev

생성자에서 싱글 톤 사용

분류에서Dev

DAL 및 서비스 클래스에 싱글 톤을 사용해야합니까?

분류에서Dev

Ruby의 싱글 톤 클래스 내에서 싱글 톤 메서드를 호출합니까?

분류에서Dev

사용자 정보. 싱글 톤 클래스 사용 여부?

분류에서Dev

레일 서비스의 DRY 싱글 톤 클래스

분류에서Dev

Java의 싱글 톤 이중 널 검사 구현에서 휘발성 사용

분류에서Dev

싱글 톤 클래스에서 멤버의 다른 인스턴스화

분류에서Dev

Play 2.5 Scala의 모듈에서 사용하는 싱글 톤 클래스의 변수에 액세스하는 방법

분류에서Dev

싱글 톤 클래스의 정적 필드에 대한 조언

분류에서Dev

Flask의 "앱"싱글 톤을 Dask 스케줄러 / 작업자에 사용

분류에서Dev

싱글 톤 인스턴스를 사용하여 클래스를 모의하는 방법

분류에서Dev

저장소의 싱글 톤에서 DataContext를 어떻게 사용합니까?

분류에서Dev

Swift에서 싱글 톤을 사용한 사이클링

분류에서Dev

iOS의 싱글 톤 객체

분류에서Dev

Svelte의 싱글 톤

분류에서Dev

RequireJS의 싱글 톤

분류에서Dev

DependencyInjection의 싱글 톤

분류에서Dev

싱글 톤 패턴을 사용하여 Java에서 캐싱

분류에서Dev

Raymond Chen의 싱글 톤 구현은 dodgy 캐스트를 사용합니까?

분류에서Dev

Glide를 모든 클래스에 대해 싱글 톤으로 사용

분류에서Dev

Vue에서 글로벌 싱글 톤 사용?

Related 관련 기사

  1. 1

    SDWebImage에 싱글 톤 사용

  2. 2

    싱글 톤 클래스 사용

  3. 3

    세 클래스에서 사용되는 싱글 톤 패턴

  4. 4

    C # 싱글 톤 사전 클래스

  5. 5

    Java의 싱글 톤 클래스 이해

  6. 6

    싱글 톤 클래스의 수명

  7. 7

    서블릿의 싱글 톤

  8. 8

    싱글 톤 클래스에서 초기화 한 후 배열이 nil입니다.

  9. 9

    생성자에서 싱글 톤 사용

  10. 10

    DAL 및 서비스 클래스에 싱글 톤을 사용해야합니까?

  11. 11

    Ruby의 싱글 톤 클래스 내에서 싱글 톤 메서드를 호출합니까?

  12. 12

    사용자 정보. 싱글 톤 클래스 사용 여부?

  13. 13

    레일 서비스의 DRY 싱글 톤 클래스

  14. 14

    Java의 싱글 톤 이중 널 검사 구현에서 휘발성 사용

  15. 15

    싱글 톤 클래스에서 멤버의 다른 인스턴스화

  16. 16

    Play 2.5 Scala의 모듈에서 사용하는 싱글 톤 클래스의 변수에 액세스하는 방법

  17. 17

    싱글 톤 클래스의 정적 필드에 대한 조언

  18. 18

    Flask의 "앱"싱글 톤을 Dask 스케줄러 / 작업자에 사용

  19. 19

    싱글 톤 인스턴스를 사용하여 클래스를 모의하는 방법

  20. 20

    저장소의 싱글 톤에서 DataContext를 어떻게 사용합니까?

  21. 21

    Swift에서 싱글 톤을 사용한 사이클링

  22. 22

    iOS의 싱글 톤 객체

  23. 23

    Svelte의 싱글 톤

  24. 24

    RequireJS의 싱글 톤

  25. 25

    DependencyInjection의 싱글 톤

  26. 26

    싱글 톤 패턴을 사용하여 Java에서 캐싱

  27. 27

    Raymond Chen의 싱글 톤 구현은 dodgy 캐스트를 사용합니까?

  28. 28

    Glide를 모든 클래스에 대해 싱글 톤으로 사용

  29. 29

    Vue에서 글로벌 싱글 톤 사용?

뜨겁다태그

보관