gpt4 book ai didi

ios - 在 swift 中使用 block

转载 作者:行者123 更新时间:2023-11-28 10:22:08 33 4
gpt4 key购买 nike

我最近开始研究 swift。我现在遇到了积木问题,所以请帮助解决这个问题。

第 1 类:

我在 Objective-C 中像这样使用 block :

typedef void (^AHServicesCallsWrapperBlock)(id, NSError *);

block 变量的声明:

@property (nonatomic, copy) AHServicesCallsWrapperBlock webServiceWrapperBlockHandler;

并传递 block 值

self.webServiceWrapperBlockHandler([graphData objectForKey:@"data"], nil);

第 2 类:我在另一个 View Controller 中使用这个 block ,例如:

AHServiceCallWrapper *webServicesCallsWrapper = [[AHServiceCallWrapper alloc] init];
webServicesCallsWrapper.webServiceWrapperBlockHandler = ^(id response, NSError *error)
{
// do stuff
}

那么我们怎样才能快速做到这一点...

最佳答案

您可以在 Swift 中使用闭包,闭包是独立的功能 block ,可以在您的代码中传递和使用。 Swift 中的闭包类似于 C 和 Objective-C 中的 block 。

闭包表达式语法具有以下一般形式:

{ (parameters) -> return type in
statements
}

示例:

如果您需要像下面这样在类中将任何闭包定义为对象,

class AHServiceCallWrapper {
var completionBlock: ((AnyObject, NSError) -> Void)? = nil

func doSomeStuff() {
var json = [AnyObject]()
var error : NSError? = nil
//Do some stuff if completed
if let completionBlock = self.completionBlock {
completionBlock(json, error);
}
}
}

现在,您可以使用如下实现

let serviceCall = AHServiceCallWrapper()
serviceCall.completionBlock = { (response, error) -> Void in
//Do the stuff on completion
}
serviceCall.doSomeStuff()

关于ios - 在 swift 中使用 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33537156/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com