【问题标题】:How to fix Objective C Methods SWIFT如何修复 Objective C 方法 SWIFT
【发布时间】:2015-06-30 02:37:20
【问题描述】:

我该如何解决这个问题?

这是代码

//
//  TTTImageView.swift
//  TicTacToe
import UIKit

class TTTImageView: UIImageView {

    var player:String?
    var activated:Bool! = false

问题在这里并指出“方法'setPlayer'与目标c选择器'setPlayer:'与具有相同目标c选择器的'player'的setter冲突”

   func setPlayer (_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


    【解决方案1】:

    这里解释了错误: https://stackoverflow.com/a/28500768/3149796

    您可以使用许多出色的 Swift 功能来代替已有的功能。尝试使用属性观察器 (didSet) 而不是创建自定义设置器函数。您还可以清理代码并使用可选绑定 (if let) 和 where 子句使其更安全。

    此外,您的 activated 属性不应被隐式解包 (Bool!),而应只是 Bool

    import UIKit
    
    class TTTImageView: UIImageView {
    
        var activated: Bool = false
    
        var player: String? {
            didSet {
                if let player = self.player where self.activated == false {
                    if self.player == "x" {
                        self.image = UIImage(named: "x")
                    } else {
                        self.image = UIImage(named: "o")
                    }
                    self.activated = true
                }
            }
        }
    
    }
    

    【讨论】:

    • 那行不通,因为我需要它成为执行命令的函数
    • 属性观察者可以执行任何可以在函数中执行的代码,并且每次设置播放器时都会这样做,例如imageView.player = "x"。如果您的意思是您还需要从其他地方执行此图像设置代码,您可以创建一个名为 updatePlayer() 的方法,可以从属性观察者和您喜欢的任何其他地方调用。
    【解决方案2】:

    我遇到了同样的问题,我可以使用 @nonobjc 解决它

    更多信息在这里: Swift 2, method 'setOn' with Objective-C selector 'setOn:' conflicts with setter for 'on' with the same Objective-C selector

    【讨论】:

    • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    【解决方案3】:

    setPlayer 更改为Player

    希望对你有帮助

    【讨论】:

    • 您好 Anish,感谢您的回答,但是关于 SO 的答案应该解释 why如何 解决方案回答问题。请看How do I write a good answer?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多