从 '(_) throws -> Void' 类型的抛出函数到非抛出函数类型 '([UNNotificationRequest]) -> Void 的无效转换

Posted

技术标签:

【中文标题】从 \'(_) throws -> Void\' 类型的抛出函数到非抛出函数类型 \'([UNNotificationRequest]) -> Void 的无效转换【英文标题】:Invalid conversion from throwing function of type '(_) throws -> Void' to non-throwing function type '([UNNotificationRequest]) -> Void从 '(_) throws -> Void' 类型的抛出函数到非抛出函数类型 '([UNNotificationRequest]) -> Void 的无效转换 【发布时间】:2018-05-02 06:54:22 【问题描述】:

我正在尝试获取有关本地通知的待处理通知请求。 它向我抛出错误: “从'(_) throws -> Void'类型的抛出函数到非抛出函数类型'([UNNotificationRequest]) -> Void'的无效转换”

我的代码是:

var notificationTitle = "\(String(describing: notificationData!["title"]))"
var notificationInterval: Int = notificationData!["interval"] as! Int
let center  =  UNUserNotificationCenter.current()
center.getPendingNotificationRequests(completionHandler: (requests) -> Void in
    var notificationExist:Bool = false
    for notificationRequest in requests 
        try
            var notificationContent:UNNotificationContent = notificationRequest.content
        
    

【问题讨论】:

【参考方案1】:

你可能想这样做,

    center.getPendingNotificationRequests(completionHandler: requests -> () in
        var notificationExist:Bool = false
        for notificationRequest in requests 
            do 
                var notificationContent:UNNotificationContent = try notificationRequest.content
            
            catch 
                print(error)
            
        
    

【讨论】:

【参考方案2】:

我不确定你的代码的哪一部分抛出了,但你的这行代码不是真的:

try
    var notificationContent:UNNotificationContent = notificationRequest.content
    

正确的做法是这样的:

do 
    var notificationContent:UNNotificationContent = try notificationRequest.content

catch 
print(error)

【讨论】:

【参考方案3】:

问题出在您的 try 块中。因此,您可以如下所示替换它。

guard let notificationContent:UNNotificationContent = try? notificationRequest.content else 
    print("There was an error!")

【讨论】:

以上是关于从 '(_) throws -> Void' 类型的抛出函数到非抛出函数类型 '([UNNotificationRequest]) -> Void 的无效转换的主要内容,如果未能解决你的问题,请参考以下文章

从 '(_, _, _) throws -> ()' 类型的抛出函数到非抛出函数类型 '(URLResponse?, Data?, Error?) -> Void 的无效转换

从 '(_) throws -> ()' 类型的抛出函数到非抛出函数类型 '(DataSnapshot) -> Void' 的无效转换

Alamofire 4从“(_) throws ->()”类型的抛出函数到非抛出函数类型“(DataResponse <Any>)-> Void”的无效转换

iOS 9(Swift 2.0):无法使用类型为“(NSURL,(_,_,_)throws-> Void)”的参数列表调用“dataTaskwithURL”

无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”

Bridging-header 是不是有可能将 (void (^)(NSError *))block (ObjC) 变成块:() throws -> () (Swift)?