Swift의 다른 구조체 내부에 배열 인 속성 내부에 구조체 추가

배고픈

안녕하세요, 다른 구조체의 속성 인 배열 안에 구조체를 추가해야합니다. 저는 Swift 3을 사용하고 있지만 아무 것도 추가하지 않고 왜 그런지 모르겠습니다. 도움이 필요하세요?

import Foundation

struct Product {
    var objectId: String
    var name: String
    var price: Double
    var qty: Int
    var img: String
    var desc: String
    var note: String
}

struct Order {
    var objectId: String
    var name: String
    var detail: [Product]
    mutating func addToDetail(_ product: Product) {
        detail.append(product)
    }
}

class OrderManager: NSObject {

    static let shared = OrderManager()

    var order: Order?

    var orderCreated: Bool {
        return self.order != nil
    }

    var partnerInOrder: String? {
        return self.order?.objectId
    }

    func createOrderIfNeeded(partnerId: String, name: String) {
        if self.order == nil {
            self.order = Order(objectId: partnerId, name: name, detail: [Product]())
        }

    }

    func addProduct(objectId: String, name: String, price: Double, qty: Int, img: String = "", desc: String = "", note: String = "") {
        guard var order = self.order else {
            return
        }

        let hasProduct = order.detail.contains(where: { $0.objectId == objectId })

        if !hasProduct {
            order.addToDetail(Product(objectId: objectId, name: name, price: price, qty: qty, img: img, desc: desc, note: note))
        }

        print("has product \(hasProduct)")
        print("the whole order is \(self.order)")
    }


    func addOption() {}

    func getProduct() {}

    func getOption() {}

    fileprivate func storeOrder() {}

}

구조체의 addToDetail func 내부에 있지만 항상 내 배열이 비어 있습니다.

dfrib

다음 guard문에서 (의 방법 addProduct에서 OrderManager)

guard var order = self.order else { /* ... */ }

당신은 만들 사본self.order(가 아니라고 주어진을 nil인해 스위프트의 구조의 값 의미로). addToDetail 이 복사본에 대한 후속 호출 Product의 인스턴스 변수 order인스턴스를 추가하지 않고 self범위를 addProduct벗어난 범위를 벗어나는 복사본에만 인스턴스를 추가합니다 .

guard에서 선택적 바인딩 절을 간단한 nil검사 로 대체하여이 이론을 테스트 할 수 있습니다 (@MartinR이 아래에서 지적했듯이 우리는 실제로 guard이 필요하지 않습니다 (수정 후 : 바인딩 없음). return의 경우 self.order이다 nil)

if self.order == nil { return }

또는 명시 적 nil검사를 모두 제거하고 선택적 연결을 사용 product하여 order인스턴스에을 추가할지 여부를 결정합니다 ( nil검사와 hasProduct단일 선택적 연결 절에서).

func addProduct(objectId: String, name: String, price: Double, qty: Int, img: String = "", desc: String = "", note: String = "") {
    if !(self.order?.detail.contains(where: { $0.objectId == objectId }) ?? true) {
        order?.addToDetail(Product(objectId: objectId, name: name, price: price, qty: qty, img: img, desc: desc, note: note))
    }
    // ... remove the logging
} 

그러나 이것은 코드의 의도를 보여주는 더 나쁜 일을합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 구조체 내부의 구조체 배열 초기화

분류에서Dev

다른 객체 배열 내부에있는 객체 배열 내부의 속성을 추출하고 결과를 문자열 배열로 가져옵니다.

분류에서Dev

C #에서 다른 구조체 내부의 구조체 배열을 PInvoke하는 방법

분류에서Dev

구조체 포인터 내부의 문자열에서 char 가리 키기

분류에서Dev

malloc을 사용하여 생성 된 다른 구조체 내부의 구조체 배열에 malloc을 사용하는 방법

분류에서Dev

구조체 내부에 구조체에 대한 포인터 배열 만들기

분류에서Dev

C의 구조체 내부에서 구조체에 대한 포인터 배열을 선언 할 수 없습니다.

분류에서Dev

내부 포인터가 배열 인 구조체 (C)

분류에서Dev

C는 구조체 내부의 구조체에 대한 배열을 선언합니다.

분류에서Dev

C ++ 벡터 내부, 즉 다른 벡터 내부에있는 구조체 내부의 구조체 값 변경

분류에서Dev

루프 내부의 구조체 배열

분류에서Dev

구조체 내부에 가변적 인 양의 구조체 객체 만들기 (C)

분류에서Dev

구조체 배열 내부의 구조체 값 수정

분류에서Dev

Coldfusion에서 배열 내부의 구조체에 '열'을 어떻게 추가합니까?

분류에서Dev

다른 배열의 객체 배열에 속성 추가-JS

분류에서Dev

구조체 내부 배열

분류에서Dev

구조체 (Swift) 내부에있는 배열에 값을 추가하려면 어떻게해야합니까?

분류에서Dev

다른 typedef 구조체 내부의 typedef 구조체 액세스

분류에서Dev

C의 구조체 내부에있는 다른 구조체에 구조체 할당

분류에서Dev

C의 구조체 내에서 포인터가 가리키는 자유 배열

분류에서Dev

Swift : JSON으로 인코딩되는 구조체에 속성 추가

분류에서Dev

구조체 포인터의 속성에 문자열 값 할당

분류에서Dev

구조체 내부에있는 속성 내부 값을 반복합니다.

분류에서Dev

구조체 (구조체 배열의 일부) 내부의 배열 요소에 액세스 (C)

분류에서Dev

다른 구조체에서 앞으로 선언 된 구조체의 배열

분류에서Dev

구조체 내에서 임의의 크기 배열 인쇄

분류에서Dev

다른 구조체의 일부인 구조체 배열 (또는 포인터)을 얻는 방법은 무엇입니까? C에서

분류에서Dev

구조체의 포인터에서 배열 가져 오기

분류에서Dev

C의 내부 중첩 구조체에 구조체 인스턴스 할당

Related 관련 기사

  1. 1

    다른 구조체 내부의 구조체 배열 초기화

  2. 2

    다른 객체 배열 내부에있는 객체 배열 내부의 속성을 추출하고 결과를 문자열 배열로 가져옵니다.

  3. 3

    C #에서 다른 구조체 내부의 구조체 배열을 PInvoke하는 방법

  4. 4

    구조체 포인터 내부의 문자열에서 char 가리 키기

  5. 5

    malloc을 사용하여 생성 된 다른 구조체 내부의 구조체 배열에 malloc을 사용하는 방법

  6. 6

    구조체 내부에 구조체에 대한 포인터 배열 만들기

  7. 7

    C의 구조체 내부에서 구조체에 대한 포인터 배열을 선언 할 수 없습니다.

  8. 8

    내부 포인터가 배열 인 구조체 (C)

  9. 9

    C는 구조체 내부의 구조체에 대한 배열을 선언합니다.

  10. 10

    C ++ 벡터 내부, 즉 다른 벡터 내부에있는 구조체 내부의 구조체 값 변경

  11. 11

    루프 내부의 구조체 배열

  12. 12

    구조체 내부에 가변적 인 양의 구조체 객체 만들기 (C)

  13. 13

    구조체 배열 내부의 구조체 값 수정

  14. 14

    Coldfusion에서 배열 내부의 구조체에 '열'을 어떻게 추가합니까?

  15. 15

    다른 배열의 객체 배열에 속성 추가-JS

  16. 16

    구조체 내부 배열

  17. 17

    구조체 (Swift) 내부에있는 배열에 값을 추가하려면 어떻게해야합니까?

  18. 18

    다른 typedef 구조체 내부의 typedef 구조체 액세스

  19. 19

    C의 구조체 내부에있는 다른 구조체에 구조체 할당

  20. 20

    C의 구조체 내에서 포인터가 가리키는 자유 배열

  21. 21

    Swift : JSON으로 인코딩되는 구조체에 속성 추가

  22. 22

    구조체 포인터의 속성에 문자열 값 할당

  23. 23

    구조체 내부에있는 속성 내부 값을 반복합니다.

  24. 24

    구조체 (구조체 배열의 일부) 내부의 배열 요소에 액세스 (C)

  25. 25

    다른 구조체에서 앞으로 선언 된 구조체의 배열

  26. 26

    구조체 내에서 임의의 크기 배열 인쇄

  27. 27

    다른 구조체의 일부인 구조체 배열 (또는 포인터)을 얻는 방법은 무엇입니까? C에서

  28. 28

    구조체의 포인터에서 배열 가져 오기

  29. 29

    C의 내부 중첩 구조체에 구조체 인스턴스 할당

뜨겁다태그

보관