【问题标题】:How to check if 2 images match each other - Swift Apple Watch如何检查 2 张图片是否相互匹配 - Swift Apple Watch
【发布时间】:2015-04-16 23:14:05
【问题描述】:

我的代码在同一个界面控制器上随机生成 2 个单独的图像。我需要检查图像是否相互匹配,但我不确定如何处理,因为它们是随机生成的。我尝试过编写 if 语句,例如:

if blueColour.setBackgroundImageNamed("colour\(randomImage).jpg") == mainBackgroundColour.setBackgroundImageNamed("mainColour\(randomMainBackground).jpg") {

        println("they match")

    } else {

        println("they dont match")

    }

但它似乎不起作用,我收到一条错误消息“二元运算符'=='不能应用于两个 Void 操作数”

我的代码如下:

@IBOutlet var blueColour: WKInterfaceButton!
@IBOutlet var pinkColour: WKInterfaceButton!
@IBOutlet var greenColour: WKInterfaceButton!
@IBOutlet var yellowColour: WKInterfaceButton!

@IBOutlet var mainBackgroundColour: WKInterfaceGroup!

@IBOutlet var scoreLabel: WKInterfaceLabel!

var randomImage = UInt32()
var randomMainBackground = UInt32()

@IBAction func onePressedTest() {


    if blueColour.setBackgroundImageNamed("colour\(randomImage).jpg") == mainBackgroundColour.setBackgroundImageNamed("mainColour\(randomMainBackground).jpg") {

        println("they match")

    } else {

        println("they dont match")

    }

    randomImage = arc4random_uniform(4)
    blueColour.setBackgroundImageNamed("colour\(randomImage).jpg")
    randomImage = arc4random_uniform(4)
    pinkColour.setBackgroundImageNamed("colour\(randomImage).jpg")
    randomImage = arc4random_uniform(4)
    greenColour.setBackgroundImageNamed("colour\(randomImage).jpg")
    randomImage = arc4random_uniform(4)
    yellowColour.setBackgroundImageNamed("colour\(randomImage).jpg")

    randomMainBackground = arc4random_uniform(4)
    mainBackgroundColour.setBackgroundImageNamed("mainColour\(randomMainBackground).jpg")

}

新修订的代码 20.04.2015:

import WatchKit
import Foundation

protocol WKInterfaceComparableImage {

func getImage()->UIImage;
func equalsImage(comparableWKObject:WKInterfaceComparableImage)->Bool;
}

class WKInterfaceButtonComparable : WKInterfaceButton, WKInterfaceComparableImage {

private var image:UIImage?;

override func setBackgroundImage(image: UIImage?) {
    self.image = image;
    super.setBackgroundImage(image);
}

func equalsImage(comparableWKObject: WKInterfaceComparableImage)->Bool {
    return self.image === comparableWKObject.getImage();
}

func getImage() -> UIImage {
    return image!;
}

}

 class WKInterfaceGroupComparable : WKInterfaceButton, WKInterfaceComparableImage {

private var image:UIImage?;

override func setBackgroundImage(image: UIImage?) {
    self.image = image;
    super.setBackgroundImage(image);
}

func equalsImage(comparableWKObject: WKInterfaceComparableImage)->Bool {
    return self.image === comparableWKObject.getImage();
}

func getImage() -> UIImage {
    return image!;
}
}

class ImageProvide {


private let MAX_RANDOM_NUMBER:UInt32 = 4

static let shared:ImageProvide = ImageProvide();

var images:[UIImage];

private init() {

    images = [];

    for i in 1...MAX_RANDOM_NUMBER {

        //get image with the best way to you
        images.append(UIImage(named: "colour\(i).jpg")!);
    }
}

func getRandomImage()->UIImage {

    let randomImage = arc4random_uniform(MAX_RANDOM_NUMBER);

    return getImage(id: Int(randomImage));
}

func getImage(#id:Int)->UIImage {

    return images[id];
}

}


class InterfaceController: WKInterfaceController {



@IBOutlet var blueColour: WKInterfaceButtonComparable!
@IBOutlet var pinkColour: WKInterfaceButtonComparable!
@IBOutlet var greenColour: WKInterfaceButtonComparable!
@IBOutlet var yellowColour: WKInterfaceButtonComparable!

@IBOutlet var mainBackgroundColour: WKInterfaceGroupComparable!

@IBOutlet var scoreLabel: WKInterfaceLabel!


var randomImage = UInt32()
var randomMainBackground = UInt32()

var score:Int = 1


@IBAction func onePressedTest() {

    if blueColour.equalsImage(mainBackgroundColour) || pinkColour.equalsImage(mainBackgroundColour) || greenColour.equalsImage(mainBackgroundColour) || yellowColour.equalsImage(mainBackgroundColour) {

        println("they match")
        scoreLabel.setText("\(score)")
        score++

    } else {

        println("they dont match")

    }

    blueColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
    pinkColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
    greenColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
    yellowColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
    mainBackgroundColour.setBackgroundImage(ImageProvide.shared.getRandomImage())

【问题讨论】:

  • 嗨,安德鲁,刚刚尝试过,但没有成功。我得到了同样的错误,这次引用'==='
  • 嗨莱昂纳多,对不起,我不太明白你的意思?请问在代码中会怎样。你能提供这个例子吗?提前致谢
  • 你把类和协议放在InterfaceController 类中,你需要从InterfaceController 中取出来工作,并使用我在下面编辑的新代码进行更新。

标签: swift if-statement apple-watch arc4random xcode-6.2


【解决方案1】:

我举了一个例子,我认为可以帮助你找到解决问题的方法,我创建了具有相当能力的类自定义来帮助你的工作。我做的很快,我没有办法为你测试,但你可以看到这个概念来帮助你创建一个解决方案。希望我的示例对您有所帮助。

ComparableImage是比较的关键,这个协议可以完成你的任务。

WKInterfaceButtonComparable 扩展 WKInterfaceButton 并且您可以保存当前图像以供之后比较,我对 WKInterfaceGroupComparable 做了同样的事情。

ImageProvide 很重要,因为这将管理您的图像,您需要编写有关图像的逻辑代码,使用此Singleton 您可以预加载图像并发送到 WK 组件。我希望它也有帮助。

protocol WKInterfaceComparableImage {

    func getImage()->UIImage;
    func equalsImage(comparableWKObject:WKInterfaceComparableImage)->Bool;
}

class WKInterfaceButtonComparable : WKInterfaceButton, WKInterfaceComparableImage {

    private var image:UIImage?;

    override func setBackgroundImage(image: UIImage?) {
        self.image = image;
        super.setBackgroundImage(image);
    }

    func equalsImage(comparableWKObject: WKInterfaceComparableImage)->Bool {
        return self.image === comparableWKObject.getImage();
    }

    func getImage() -> UIImage {
        return image!;
    }

}

class WKInterfaceGroupComparable : WKInterfaceButton, WKInterfaceComparableImage {

    private var image:UIImage?;

    override func setBackgroundImage(image: UIImage?) {
        self.image = image;
        super.setBackgroundImage(image);
    }

    func equalsImage(comparableWKObject: WKInterfaceComparableImage)->Bool {
        return self.image === comparableWKObject.getImage();
    }

    func getImage() -> UIImage {
        return image!;
    }

}

class ImageProvide {


    private let MAX_RANDOM_NUMBER:UInt32 = 4

    static let shared:ImageProvide = ImageProvide();

    var images:[UIImage];

    private init() {

        images = [];

        for i in 1...MAX_RANDOM_NUMBER {

            //get image with the best way to you
            images.append(UIImage(named: "colour\(i).jpg")!);
        }
    }

    func getRandomImage()->UIImage {

        let randomImage = arc4random_uniform(MAX_RANDOM_NUMBER);

        return getImage(id: Int(randomImage));
    }

    func getImage(#id:Int)->UIImage {

        return images[id];
    }

}


class InterfaceController: WKInterfaceController {


    @IBOutlet var blueColour: WKInterfaceButtonComparable!
    @IBOutlet var pinkColour: WKInterfaceButtonComparable!
    @IBOutlet var greenColour: WKInterfaceButtonComparable!
    @IBOutlet var yellowColour: WKInterfaceButtonComparable!

    @IBOutlet var mainBackgroundColour: WKInterfaceGroupComparable!

    @IBOutlet var scoreLabel: WKInterfaceLabel!


    var randomImage = UInt32()
    var randomMainBackground = UInt32()

    var score:Int = 1


    @IBAction func onePressedTest() {

        if blueColour.equalsImage(mainBackgroundColour) {

            println("they match")

        } else {

            println("they dont match")

        }

        blueColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
        pinkColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
        greenColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
        yellowColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
        mainBackgroundColour.setBackgroundImage(ImageProvide.shared.getRandomImage())
    }
}

【讨论】:

  • 感谢您的帮助。我已经尝试了您的代码,但出现了一些错误。在显示为:protocol ComparableImage { - 我得到错误:声明仅在文件范围内有效的行上。在读取的行上, class WKInterfaceButtonComparable : WKInterfaceButton, ComparableImage { - 我得到错误: Class 'InterfaceController.WKInterfaceButtonComparable' has no initializers。在一行上写着: let randomImage = arc4random_uniform(MAX_RANDOM_NUMBER); - 我收到错误:无法使用参数列表类型“(Int)”调用“arc4random_uniform”。我在上面添加了我的更新代码。你能帮忙吗?
  • 抱歉,我根据您的通知编辑了代码。 WKInterfaceButtonComparable : WKInterfaceButton, ComparableImage { - 我得到错误:Class 'InterfaceController.WKInterfaceButtonComparable' has no initializersprivate var image:UIImage?; 修复 let randomImage = arc4random_uniform(MAX_RANDOM_NUMBER); - 我收到错误:无法使用参数列表类型“(Int)”调用“arc4random_uniform”通过在常量MAX_RANDOM_NUMER中添加Uint32类型来修复protocol ComparableImage {声明仅在文件范围内有效。 我相信你忘记了带有 ComparableImage 协议的 swift 文件!
  • 嗨@ViTUu - 我刚刚尝试了你的新代码并在上面更新了它。我仍然得到错误。而且我在这一行也遇到了错误: if blueColour.equalsImage(mainBackgroundColour) { - 它得到的错误是:无法使用参数列表类型调用 'equalsImage' ('Interface.WKInterfaceGroupComparable!)'
  • @Nick89 您能否在您的问题中更新此代码。可以更新吗?
  • 感谢您为此提供的所有帮助!上面的代码是我最新的代码,有你告诉我申请的修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 2017-11-30
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多