【问题标题】:Converting objective-c block syntax to swift将objective-c块语法转换为swift
【发布时间】:2015-12-20 23:30:22
【问题描述】:

我一直在练习积木,希望有人帮助我将它从 Objective C 转换为 Swift。

以下 Objective C 代码可以正常工作...每秒记录一个随机数

- (void)viewDidLoad {
[super viewDidLoad];


NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(returnNumberMethod) userInfo:nil repeats:YES];

}

 - (void)returnNumberMethod {

[self returnRandomInt:^(NSInteger randNum) {

    NSLog(@"%ld", (long)randNum);
}];

}

- (void)returnRandomInt:(void (^)(NSInteger randNum)) completion {

NSInteger number = arc4random_uniform(100);

completion(number);

}

我的快速尝试,但没有奏效,我知道语法错误,但有人可以帮助翻译上述代码吗?谢谢!

override func viewDidLoad() {
    super.viewDidLoad()

    let timer = NSTimer(timeInterval: 1, target: self, selector: "getRandomNumber", userInfo: nil, repeats: true)

}

//block practice

func getRandomNumber() {

    self.randomNumber { (number) -> NSInteger in

        let numberString = NSString(format: "%ld", number)

        print(numberString)
    }
}

func randomNumber(completion: (number: NSInteger) -> NSInteger) {

    let numero = arc4random_uniform(100)

}

【问题讨论】:

    标签: ios objective-c swift closures objective-c-blocks


    【解决方案1】:

    你已经接近了:使完成回调成为接受UInt32(因为这是arc4random_uniform返回的类型)的方法并返回void。此外,更改您调用函数的语法。以下作品:

    func getRandomNumber() {
        randomNumber { number in
            let numberString = NSString(format: "%ld", number)
            print(numberString)
        }
    }
    
    func randomNumber(completion: (UInt32 -> Void)) {
        let numero = arc4random_uniform(100)
        completion(numero)
    }
    

    你可以通过使用print("\(number)")而不是字符串格式来快速使用字符串魔法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      相关资源
      最近更新 更多