不能使用类型'(Int)'的参数列表调用'setScore'

时间:2015-08-03 11:38:22

标签: swift watchkit func watch-os

我很擅长使用Swift并遇到问题: 我的WatchKit应用程序中有两个类。

第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)'

我不知道如何解决这个问题,如果有人能帮助我会很棒:) 感谢

2 个答案:

答案 0 :(得分:0)

这在黑暗中有点像......

在从Objective-C类继承的类中使用setXXX作为函数名称可能会有问题,因为它看起来像是Objective-C属性的setter。

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

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

并像这样调用

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

答案 1 :(得分:-1)

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

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

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

PS不要忘记"演员" AnyObject到int

的上下文值

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

的示例

在原始类中:

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

在目标类中:

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

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

}