Swift необязательно для вложенного массива

#swift #swift5

#swift #swift5

Вопрос:

Я создаю игру в крестики-нолики на swift, используя вложенный массив. Я создаю вложенный массив строк. Как мне проверить необязательное значение для nil здесь и вводить символ только в том случае, если оно равно нулю. Объясните мне концепцию опций здесь, пожалуйста.

 var board: [[String]]?
func placeSymbol(position: (Int, Int), symbol: String) {
  if(position.0 < 3 amp;amp; position.1 < 3) {
    if (board?[position.0][position.1]) != nil {
        board?[position.0][position.1] = symbol
    }
  }
    print(board)
}

placeSymbol(position: (1, 1), symbol: "X")
  

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

1. docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID330

Ответ №1:

Чтобы создать массив необязательных строк, мы создаем массив необязательных строк

 var board: [[String?]]
  

Мы также не забываем каким-либо образом инициализировать массив, например, вот так (хотя это всего лишь демонстрация)

 board = [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
  

И теперь мы можем попытаться развернуть наши опции и проверить результат развертывания

 if let cell = board[position.0][position.1] {
} else {
    // our cell logic
}
  

Ответ №2:

Прежде всего, поскольку вы знаете размер платы, вам необходимо инициализировать board Array со всеми nil значениями.

 var board = [[String?]](repeating: [String?](repeating: nil, count: 3), count: 3)
  

Инициализация требуется, потому что в an Array вы не можете добавить элемент в an index , если index он в данный момент не существует. Это вызовет исключение во время выполнения.

Теперь в placeSymbol(position:symbol:) метод добавьте symbol после проверки, является ли значение at board[position.0][position.1] nil , т.е.

 func placeSymbol(position: (Int, Int), symbol: String) {
    if board[position.0][position.1] == nil {
        board[position.0][position.1] = symbol
    }
    print(board)
}