Swift3 xcode8编码问题,方法';setplayer';

Swift3 xcode8编码问题,方法';setplayer';,swift3,xcode8,Swift3,Xcode8,所以我试着跟随一个教程,我完成了大部分,但我仍然在这里收到错误消息,不知道如何修复它们 我收到一条错误消息,内容如下 方法“setplayer”与Objective-C选择器“setplayer:”冲突 “球员”的二传手具有相同的Objective-C选择器 导入UIKit 类TTTImageView:UIImageView{ 玩家:字符串? 变量激活:Bool!=错误 func setPlayer(uu-player:String){“解决方案: class TTTImageView: UII

所以我试着跟随一个教程,我完成了大部分,但我仍然在这里收到错误消息,不知道如何修复它们

我收到一条错误消息,内容如下

方法“setplayer”与Objective-C选择器“setplayer:”冲突 “球员”的二传手具有相同的Objective-C选择器

导入UIKit
类TTTImageView:UIImageView{
玩家:字符串?
变量激活:Bool!=错误

func setPlayer(uu-player:String){“解决方案:

class TTTImageView: UIImageView {

    var player: String?
    var activated: Bool = false

    func placePlayer(_ _player: String) {
        self.player = _player

        if activated == false {
            if _player == "x" {
                self.image = UIImage(named: "x")
            } else {
                self.image = UIImage(named: "o")
            }
            activated = true
        }

    }
}
只需将方法从
setPlayer
重命名为类似
placePlayer
的其他方法,就可以了

原因:

class TTTImageView: UIImageView {

    var player: String?
    var activated: Bool = false

    func placePlayer(_ _player: String) {
        self.player = _player

        if activated == false {
            if _player == "x" {
                self.image = UIImage(named: "x")
            } else {
                self.image = UIImage(named: "o")
            }
            activated = true
        }

    }
}
由于Swift和Objective-C是可互操作的,因此Swift代码的Objective-C翻译也必须有效。在Objective-C中,属性已自动生成setter,其名称为
set
,后跟属性名称。您的函数与此自动生成函数冲突,因此您会得到一个错误

代码:

class TTTImageView: UIImageView {

    var player: String?
    var activated: Bool = false

    func placePlayer(_ _player: String) {
        self.player = _player

        if activated == false {
            if _player == "x" {
                self.image = UIImage(named: "x")
            } else {
                self.image = UIImage(named: "o")
            }
            activated = true
        }

    }
}

错误消息似乎准确地解释了您的问题。属性“player”的setter将被称为“setPlayer”。如果我的解决方案对您有效,请将其标记为“已接受”,以便其他人在将来遇到相同问题时,能够快速找到解决方案。