地图功能变化 Xcode 10
Map function changes in Xcode 10
我有一个声明为 var noOfPlayers: [PlayerDetail]!
的变量 现在假设我在 PlayerDetail
中有一个声明为 var playerReadyStatus: Bool = true
的 属性。现在对于 noOfPlayers
中的每个元素,我想更改 PlayerDetail
的 属性。我正在使用地图来实现这一目标
func resetPlayerStatus(){
noOfPlayers = noOfPlayers.map{ [=11=].playerReadyStatus = false; return [=11=]}
}
这曾经在 Xcode 9 中运行良好,但当我更新到 Xcode 10 时,它显示 Value of type '[PlayerDetail]' has no member 'playerReadyStatus'
Xcode 10
中的地图功能是否发生了变化?使用地图的新方法应该是什么?
为什么会出现这个错误
从 Swift 4.2 开始,ImplicitlyUnwrappedOptional
is removed from the type system 并被替换为一个属性。这意味着 [PlayerDetail]!
的类型变为 [PlayerDetail]?
(一个可选的 PlayerDetail 元素数组),并带有一个属性,说明它在使用时可以隐式解包。
由于 noOfPlayers
的类型是 [PlayerDetail]?
,您的代码使用的是 Optional 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
}
}
我有一个声明为 var noOfPlayers: [PlayerDetail]!
的变量 现在假设我在 PlayerDetail
中有一个声明为 var playerReadyStatus: Bool = true
的 属性。现在对于 noOfPlayers
中的每个元素,我想更改 PlayerDetail
的 属性。我正在使用地图来实现这一目标
func resetPlayerStatus(){
noOfPlayers = noOfPlayers.map{ [=11=].playerReadyStatus = false; return [=11=]}
}
这曾经在 Xcode 9 中运行良好,但当我更新到 Xcode 10 时,它显示 Value of type '[PlayerDetail]' has no member 'playerReadyStatus'
Xcode 10
中的地图功能是否发生了变化?使用地图的新方法应该是什么?
为什么会出现这个错误
从 Swift 4.2 开始,ImplicitlyUnwrappedOptional
is removed from the type system 并被替换为一个属性。这意味着 [PlayerDetail]!
的类型变为 [PlayerDetail]?
(一个可选的 PlayerDetail 元素数组),并带有一个属性,说明它在使用时可以隐式解包。
由于 noOfPlayers
的类型是 [PlayerDetail]?
,您的代码使用的是 Optional 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
}
}