Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift3对成员下标的引用不明确_Ios_Swift_Swift3 - Fatal编程技术网

Ios swift3对成员下标的引用不明确

Ios swift3对成员下标的引用不明确,ios,swift,swift3,Ios,Swift,Swift3,我知道这个问题已经问了无数次了,但我仍然在努力寻找答案。这是我的代码中最简单的例子,尽管自从我升级到Swift 3后,我的代码的其余部分也充满了这个错误 func generateDummyPlayers(numberOfPlayers: Int32) -> [NSString : Player] { var _players = [NSString : Player]() if(numberOfPlayers) > 0 { for i in 1...

我知道这个问题已经问了无数次了,但我仍然在努力寻找答案。这是我的代码中最简单的例子,尽管自从我升级到Swift 3后,我的代码的其余部分也充满了这个错误

func generateDummyPlayers(numberOfPlayers: Int32) -> [NSString : Player] {
    var _players = [NSString : Player]()
    if(numberOfPlayers) > 0 {
        for i in 1...numberOfPlayers {
            let name: String = "\(Player.prefix) \(i)";
            let player: Player = Player(name: name);
            _players[name] = player; //Ambiguous reference to member 'subscript'
        }
    }
    return _players;
}

您将字典定义为
[NSString:Player]
,但您的键是
String

var _players = [NSString : Player]()
let name: String = "\(Player.prefix) \(i)"

_players[name] = player // Error
var _players = [String : Player]()
如果不需要与ObjC交互,请使用
String

var _players = [NSString : Player]()
let name: String = "\(Player.prefix) \(i)"

_players[name] = player // Error
var _players = [String : Player]()

name
是一个字符串,因此它不是NSString。您可以将方法签名更改为仅使用字符串(推荐):

您可以在需要时将
name
更改为NSString(不推荐):

您还可以使用更多的抽象(但我不鼓励这样做,因为):


如果您的
player
对象包含可选值,则可能会出现此类错误。大多数情况下,当尝试在字典中存储可选视图时,会出现这种错误。如果您确实需要
NSString
,那么
\u players[name as NSString]=player
就可以了。非常感谢你们两位
func generateDummyPlayers(numberOfPlayers: Int32) -> [String : Player] {
    guard numberOfPlayers > 0 else {
        return [:]
    }
    return (1...numberOfPlayers)
        .map({ "\(Player.prefix) \($0)" })
        .reduce([:]) {
            var players = $0
            players[$1] = Player(name: $1)
            return players
    }
}