如何在Swfit中调用一个以闭包为参数的方法?

时间:2018-04-19 04:46:03

标签: ios swift

我尝试编写如下方法:

class ThisIsExample{
    func theMethod(inside:((Error?)->Void)->Void){        
       //some implementation
    }       
}

但是,当我尝试调用此方法时,我不知道该怎么做。

我在下面写了代码:

let example = ThisIsExample()
example.theMethod { ({(err) in }) in
        print("print something")
}

我尝试在闭包

中编写另一个闭包,即{(错误)}}

但它不可行,我会收到错误消息,如

  

上下文闭包类型'((错误?) - > Void) - > Void'期望1   参数,但在封闭体中使用了0

所以...有人可以教我如何以正确的方式调用这种方法,非常感谢你。

3 个答案:

答案 0 :(得分:2)

虽然不确定嵌套闭包的目的是什么。但是如果你想使用这种方法,那么你应该以这种方式调用闭包,

example.theMethod { (closure) in      
     closure(NSError.init())
}

答案 1 :(得分:0)

你可以这样做:

 func theMethod(inside:(Error?) -> ()) {
        print("Closure as paramater")
    }

这会将Error作为闭包参数并返回void。

您可以按以下方式调用此功能:

 theMethod { (error) in

        }

答案 2 :(得分:0)

像这样的东西

class NewClass
{
    class func myCustomFunc(_ parameter1: String, parameterDict : [String : AnyObject]?, success:@escaping (String) -> Void, failure:@escaping (String) -> Void)
    {

        /// Just example Bool
        var result : Bool = false

        /// Get the parameter you sent while calling this Clousure block
        let myParamString = parameter1
        let paramDict = parameterDict

        /// Share the output in case of Success and Failure
        if (result){
            success("success")
        }
        else{
            failure("Failure")
        }
    }
}

<强>用法

NewClass.myCustomFunc("demoStr", parameterDict: [:], success: { (succesString) in
            if succesString == "success"{

            }
        }) { (failureStr) in
            if failureStr == "failure"{

            }
        }

此函数接受参数,并根据闭包给出不同的块