Ios 常数';spacesLeft';推断为具有类型';()';,这可能是出乎意料的

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”推断为具有类型“()”,这可能是意外

我正在使用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”推断为具有类型“()”,这可能是意外的

下面有一个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
属性/变量,所以会出现这些错误

也许您应该看看
减法(:)
函数,它返回一个不同的

发件人:

减法(:)

返回一个新的集合,其中包含该集合中未出现的元素