Массив не виден в области видимости, я не уверен, почему SwiftUI

#arrays #swift #swiftui

Вопрос:

Код:

 extension Array {
    // Total Together An Array
    func FindTotal(_ arrayName: [Int]) -> Int {
        var currentValue: Int = 0
        for i in 0...Int(arrayName.count - 1) {
            currentValue = currentValue   Int(arrayName[i])
        }
        return currentValue
    }
    
    // Number Grabber for Calculating the values
    func calcItemsD(_ TargetArray: [String]) {
        var placeholder: String? = nil
        for i in 0...Int(TargetArray.count - 1)  {
            placeholder = String((TargetArray[i]).character(at: 0)!)
            if (placeholder == "1") {
                dealerNums.append("")
            }
        }
    }
}

class DeckSetup :  ObservableObject {
    @Published public var deckOCards: [String] = []
    @Published public var yourhand: [String] = []
    @Published public var dealerHand: [String] = []
    @Published public var dealerNums: [Int] = [7, 2]
    @Published public var playerNums: [Int] = []
}
 

dealerNums.append(«») выдает ошибку, выходящую за рамки, и я не уверен, почему здесь весь код, который должен быть релевантным.

Комментарии:

1. Вы можете использовать встроенную функцию reduce вместо FindTotal, и calcItemsD следует переместить в DeckSetup

Ответ №1:

dealerNums представляет собой массив, инкапсулированный в вашем DeckSetup классе. Вы не можете получить доступ к нему из дополнительного Array модуля.

Что вы можете сделать, так это войти dealerNums в функцию, вот так:

 func calcItemsD(_ targetArray: [String], dealerNums: inout [Int]) {
    var placeholder: String? = nil
    for i in 0 ..< targetArray.count  {
        placeholder = String(targetArray[i].first!)
        if placeholder == "1" {
            dealerNums.append("")
        }
    }
}
 

И позвонил так из своего DeckSetup класса:

 calcItemsD(["1", "K", "A"], dealerNums: amp;dealerNums)
 

dealerNums помечен inout , так как вы изменяете его в функции.


Я немного очистил функцию, но не знаю, есть ли у вас для этого еще что-то. Например, это больше вещей, которые вы могли бы изменить, чтобы улучшить его:

  • Выполните итерацию for target in targetArray вместо использования индекса.
  • placeholder не требуется хранить вне цикла, так как он не используется. let placeholder = ... При необходимости вы можете обратиться к местному специалисту.
  • Не заставляйте разворачивать ( ! ) первый символ. Предоставьте подходящую альтернативу или запасной вариант.