0

我对使用 Swift 很陌生并且有一个问题:我的 WatchKit 应用程序中有两个类。

第一类:

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

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

4

2 回答 2

0

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

setXXX在从 Objective-C 类继承的类中用作函数名可能会出现问题,因为它看起来像 Objective-C 属性的设置器。

事实上,我会重构它以利用 Swift 特性,例如

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

并像这样调用

self.presentControllerWithName("scorePage", context: self)
scorePage.score = countNumber
于 2015-08-04T10:00:02.280 回答
-1

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

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

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

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];
    }

}
于 2015-08-03T14:56:13.977 回答