无法使用“(Int)”类型的参数列表调用 'setScore'

cannot invoke 'setScore' with an argument list of type '(Int)'

我对使用 Swift 还很陌生,遇到了一个问题: 我的 WatchKit 应用程序中有两个 类。

Class 1:

func setScore(inputScore: Int) {
    scoreLabel.setText(String(inputScore))
}

... 和 Class 2 应该可以访问此函数:

var countNumber = 0
...

self.presentControllerWithName("scorePage", context: self)
            scorePage.setScore(countNumber)

但我总是得到一个错误:cannot invoke 'setScore' with an argument list of type '(Int)'

我不知道如何解决这个问题,如果有人能帮助我就太好了:) 谢谢

我不确定你到底想做什么,但我相信你想将数据从一个 WKInterfaceController 传递到另一个 WKInterfaceController,所以你可以使用上下文:

self.presentControllerWithName("scorePage", 上下文: countNumber)

一旦你在接收器 WKInterfaceController 中,你应该收到覆盖 awakeWithContext 的 countNumber:func(上下文变量现在应该有 countNumber 值)然后你可以设置分数: self.setScore(上下文)

PS 不要忘记 "cast" 上下文值从 AnyObject 到 int

使用 Obj-C 和 NSNumber 而不是 int 的示例:

在原点class:

[self pushControllerWithName:@"scorePage" context:countNumber];

目的地class:

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    if ([context isKindOfClass:[NSNumber class]]) {
        NSNumber *num = (NSNumber *)context;
       [self setScore:num];
    }

}

这有点摸不着头脑....

在继承自 Objective-C class 的 class 中使用 setXXX 作为函数名称可能会出现问题,因为它看起来像 setter一个 Objective-C 属性。

事实上,我会重构它以利用 Swift 功能,例如

class MyClass
{
    var score: Int = 0
    {
        didSet
        {
            scoreLabel.setText(String(score))
        }
    }
    // everything else
}

并像这样调用

self.presentControllerWithName("scorePage", context: self)
scorePage.score = countNumber