将可比较的值类型 Int 应用于 Swift 4 中的 UIImage 对象

Posted

技术标签:

【中文标题】将可比较的值类型 Int 应用于 Swift 4 中的 UIImage 对象【英文标题】:Apply a comparable value type Int to an UIImage object in Swift 4 【发布时间】:2019-01-16 18:24:52 【问题描述】:

我正在制作一个简单的配对游戏,在配对游戏中,当动物的图片与代表动物名称的单词匹配时,用户将单击一个按钮。图片和文字都是我的应用程序中的 UIImages。我想出了如何比较数组中的两个图像对象,以确定它们是否匹配并相应地应用分数......

if gameMode == 1 

        if animalWord.image == animalPic.image 

            scoreInt += 1
            scoreLabel.text = String("Score: \(scoreInt)")

         else 

            scoreInt -= 1
            scoreLabel.text = String("Score: \(scoreInt)")

        

    

但是,这不会完成我需要它做的事情,因为 UIImages 不会相同。因此,我需要为每个 UIImage 分配一个可以相同的值并比较这些值。换句话说,如果我可以将值 1 分配给猪图片的 UIImage 并将值 1 分配给单词 PIG 的 UIImage,那么我应该能够比较这些值以查看它们是否匹配.这应该是可能的,我只是不知道怎么做。有什么建议吗?

【问题讨论】:

【参考方案1】:

使用结构并添加自定义相等运算符

struct Item : Equatable 
    let image : UIImage
    let value : Int

    static func ==(lhs: Item, rhs: Item) -> Bool 
        return lhs.value == rhs.value
    

然后创建Item 的实例,分配图像和适当的值

let item1 = Item(image : UIImage(named: "PigAnimal")!, value: 1)
let item2 = Item(image : UIImage(named: "PigWord")!, value: 1)

比较

if gameMode == 1 

    if item1 == item2 
        scoreInt += 1                
     else 
        scoreInt -= 1             
    
    scoreLabel.text = "Score: \(scoreInt)"

【讨论】:

谢谢。你教会了我一些新东西。我确实有两个问题,希望您能简单地回答一下。 1)使用MVC模式,这个结构应该放在“视图控制器”文件之外的“模型”文件中吗? 2)“lhs”和“rhs”代表什么? 1) 是的,这是一种很好的做法。 2) 取自documentation 中的示例代码。我认为这意味着 left 和 right hside 再次感谢。感谢您的跟进。

以上是关于将可比较的值类型 Int 应用于 Swift 4 中的 UIImage 对象的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:二元运算符不能应用于 int 和“Int”类型的操作数?

在 swift assert(0) 中无法将 Int 类型的值转换为预期的参数类型 Bool

Integer与int

swift3.0 无法将类型“[UnsafeMutablePointer<Int8>]”的值转换为预期的参数类型“UnsafeMutablePointer<Int8>?”

如何在Swift 4中增加Index.String类型的变量?

Swift 4:无法将类型“(Void)-> Void”的值分配给类型“(()-> Void)?”