我有一个变量声明为 var noOfPlayers: [PlayerDetail]!
现在假设我有一个属性声明为 var playerReadyStatus: Bool = true
inside PlayerDetail
。现在,对于 noOfPlayers
中的每个元素,我想更改 PlayerDetail
的这个属性。我正在使用 map 来实现这一点
func resetPlayerStatus(){
noOfPlayers = noOfPlayers.map{ $0.playerReadyStatus = false; return $0}
}
这曾经在 Xcode 9 中运行良好,但当我更新到 Xcode 10 时,它说 Value of type '[PlayerDetail]' has no member 'playerReadyStatus'
Xcode 10
中的 map 功能是否发生了变化?使用 map 的新方法应该是什么?
最佳答案
为什么会出现这个错误
从 Swift 4.2 开始,ImplicitlyUnwrappedOptional
is removed from the type system并替换为属性。这意味着 [PlayerDetail]!
的类型变为 [PlayerDetail]?
(一个可选的 PlayerDetail 元素数组),并带有一个属性,表明在使用时可以隐式解包。
由于 noOfPlayers
的类型是 [PlayerDetail]?
,您的代码使用了 Optional map(_:)
.它检查值是否为 nil
并在非 nil 的情况下对展开的值应用转换。这意味着如果 noOfPlayers
不为零,则展开的 [PlayerDetail]
值将传递到闭包中。播放器详细信息数组没有 playerReadyStatus
属性,这就是为什么您会看到
类型“[PlayerDetail]”的值没有成员“playerReadyStatus”
错误。
如何解决。
您可能不需要一组可选的播放器。您可以将类型更改为 [PlayerDetail]
,但您可能需要根据其初始化方式为其提供初始值(例如空数组)。
如果您需要区分无数组和空数组,那么在使用 noPlayers
时,您应该将其视为可选项(并且可能将 !
更改为?
在声明中),例如:
noOfPlayers = noOfPlayers.map { unwrappedNoOfPlayers in
unwrappedNoOfPlayers.map { playerElement in
playerElement.playerReadyStatus = false; return playerElement
}
}
关于ios - Xcode 10 中 map 功能的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52589961/