简体   繁体   English

将Objective-C块语法转换为Swift

[英]Converting objective-c block syntax to swift

I've been practicing blocks a bit and would like some help converting this one from Objective C to Swift. 我一直在练习块,希望对将其从Objective C转换为Swift有所帮助。

The below Objective C code works just fine... logging a random number every second 下面的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);

}

My swift attempt, but it didn't work, I know the syntax is wrong but would someone be able to help with translating the above code? 我迅速尝试,但没有成功,我知道语法是错误的,但是有人可以帮助翻译上面的代码吗? Thank you! 谢谢!

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)

}

You are close: make the completion callback a method accepting an UInt32 (since that is the type returned by arc4random_uniform ) and return void. 您接近了:使完成回调成为接受UInt32的方法(因为这是arc4random_uniform返回的类型),并返回void。 Additionally change the syntax you are calling the function with. 另外,更改用于调用该函数的语法。 The following works: 以下作品:

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

You can make use of the string magic in swift by using print("\\(number)") instead of the string format. 您可以通过使用print("\\(number)")而不是字符串格式来快速使用字符串魔术。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM