#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)
}