Почему происходит эта ошибка
Начиная с Swift 4.2, ImplicitlyUnwrappedOptional
удаляется из системы типов и заменяется атрибутом.Это означает, что тип [PlayerDetail]!
становится [PlayerDetail]?
(необязательный массив элементов PlayerDetail) с атрибутом, утверждающим, что он может быть неявно развернут при использовании.
Поскольку тип noOfPlayers
равен [PlayerDetail]?
, ваш код использует Необязательно map(_:)
.Он проверяет, является ли значение nil
, и применяет преобразование к развернутому значению, если оно не равно нулю.Это означает, что если noOfPlayers
не ноль, развернутое значение [PlayerDetail]
передается в замыкание.Массив сведений об игроке не имеет свойства playerReadyStatus
, поэтому вы видите ошибку Value of type '[PlayerDetail]' has no member 'playerReadyStatus'
.
Как ее решить.
Вы, вероятно, не имеетенужно иметь дополнительный массив игроков.Возможно, вы можете просто изменить тип на [PlayerDetail]
, но вам может потребоваться присвоить ему начальное значение (например, пустой массив) в зависимости от того, как он инициализируется.
Если вам необходимо провести различиемежду массивом и пустым массивом, тогда вы должны обращаться с ним как с необязательным при работе с noPlayers
(и, возможно, изменить !
на ?
в объявлении), например:
noOfPlayers = noOfPlayers.map { unwrappedNoOfPlayers in
unwrappedNoOfPlayers.map { playerElement in
playerElement.playerReadyStatus = false; return playerElement
}
}