Ios 常数';spacesLeft';推断为具有类型';()';,这可能是出乎意料的
我正在使用Xcode 8和Swift构建一个人工智能的井字游戏。以下是我正在使用的导致错误的相关变量:Ios 常数';spacesLeft';推断为具有类型';()';,这可能是出乎意料的,ios,swift,xcode,swift3,xcode8,Ios,Swift,Xcode,Swift3,Xcode8,我正在使用Xcode 8和Swift构建一个人工智能的井字游戏。以下是我正在使用的导致错误的相关变量: var allSpaces: Set<Int> = [1,2,3,4,5,6,7,8,9] var playerOneMoves = Set<Int>() var playerTwoMoves = Set<Int>() var nextMove: Int? = nil 后者会导致编译器警告: 常量“spacesLeft”推断为具有类型“()”,这可能是意外
var allSpaces: Set<Int> = [1,2,3,4,5,6,7,8,9]
var playerOneMoves = Set<Int>()
var playerTwoMoves = Set<Int>()
var nextMove: Int? = nil
后者会导致编译器警告:
常量“spacesLeft”推断为具有类型“()”,这可能是意外的
下面有一个if语句,它说:
if allSpaces.subtract(playerOneMoves.union(playerTwoMoves)).count > 0 {
nextMove = spacesLeft[spacesLeft.startIndex.advancedBy(Int(arc4random_uniform(UInt32(spacesLeft.count))))]
}
该条件产生以下错误:
元组类型“()”的值没有成员“count”
该语句给出了以下错误:
类型“()”没有下标成员
我正在努力寻找解决方案。
subtract
修改Set
到位且不返回值,您要使用减法subtract
修改到位且不返回值,您要使用减法作为第一个警告,subtract
返回无效
,因此使用减法
:
let spacesLeft = allSpaces.subtracting(playerOneMoves.union(playerTwoMoves))
对于第二个错误,advancedBy
已被弃用,您可以这样更改:
if spacesLeft.count > 0 {
nextMove = spacesLeft[spacesLeft.index(spacesLeft.startIndex, offsetBy: Int(arc4random_uniform(UInt32(spacesLeft.count))))]
}
对于第一个警告,subtract
返回Void
,因此使用subtraction
:
let spacesLeft = allSpaces.subtracting(playerOneMoves.union(playerTwoMoves))
对于第二个错误,advancedBy
已被弃用,您可以这样更改:
if spacesLeft.count > 0 {
nextMove = spacesLeft[spacesLeft.index(spacesLeft.startIndex, offsetBy: Int(arc4random_uniform(UInt32(spacesLeft.count))))]
}
Set.subtract
是一个变异函数,因此它就地修改Set
,其返回值为Void
,这只是空元组的类型别名,()
,因此出现警告
您应该调用Set.substrating
,它是subtract
的非变异版本,并返回Set
Set.subtract
是一个变异函数,因此它就地修改集,其返回值为Void
,这只是空元组的类型别名,()
,因此发出警告
您应该调用Set.substrating
,它是subtract
的非变异版本,并返回Set
该subtract(:)
函数是一个变异函数,因此它将变异用于调用该函数的集
发件人:
减法(:)
从此集合中删除给定集合的元素
出现错误的原因是因为此函数返回Void
,在Swift中,它是空元组的类型别名(.因为Void
没有下标,也没有count
属性/变量,所以会出现这些错误
也许您应该看看减法(:)
函数,它返回一个不同的集
发件人:
减法(:)
返回一个新的集合,其中包含该集合中未出现的元素
subtract(:)
函数是一个变异函数,因此它将变异用于调用函数的Set
发件人:
减法(:)
从此集合中删除给定集合的元素
出现错误的原因是因为此函数返回Void
,在Swift中,它是空元组的类型别名(.因为Void
没有下标,也没有count
属性/变量,所以会出现这些错误
也许您应该看看减法(:)
函数,它返回一个不同的集
发件人:
减法(:)
返回一个新的集合,其中包含该集合中未出现的元素