可选类型 '()?' 的值未打开

Posted

技术标签:

【中文标题】可选类型 \'()?\' 的值未打开【英文标题】:Value of optional type '()?' not unwrapped可选类型 '()?' 的值未打开 【发布时间】:2016-01-11 12:22:06 【问题描述】:

据我所知,下面代码中的可选失败块已经被 ? 解包,但 xCode 一直在抱怨我的语法。如果您仔细查看success 块,它看起来与failure 块完全相同,但不知何故,xCode 并未标记success 块。我以前遇到过这个问题,并设法通过 build clean 解决了这个问题,但这次不是。有没有人遇到过类似的问题?

public func authorizeLogin(token: String, success: (() -> ())?, failure: (() -> ())?) 
        let path = "me/two-step/push-authentication"
        let requestUrl = self.pathForEndpoint(path, withVersion: ServiceRemoteRESTApiVersion_1_1)

        let parameters  = [
            "action"        : "authorize_login",
            "push_token"    : token
        ]

        api.POST(requestUrl,
            parameters: parameters,
            success:  (operation: AFHTTPRequestOperation!, response: AnyObject!) -> Void in
                success?()
            ,
            failure: (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in
                failure?()
            )
    

这是带有错误消息的屏幕截图:

value of optional type '()?' not unwrapped; did you mean to use '!' or '?'

【问题讨论】:

看起来像是编译器问题(可能是缓存)。报告的类型不正确,应该是(()->())?,而不仅仅是()?。编译器似乎认为failureVoid 有没有办法清理缓存? 你可以删除xcode的缓存文件夹,它位于~/Library/Caches/Xcode/...之类的地方,你应该可以在SO上找到它。 我刚刚尝试了cleanclean build folder,并删除了所有~/Library/Developer/Xcode/DerivedData/,但问题仍然存在。 尝试同时删除~/Library/Caches/com.apple.dt.Xcode 【参考方案1】:

您的代码中的某些内容看起来很可疑...您的 failure 闭包和您的 success 闭包似乎都在试图称呼自己。例如:

success:  (operation: AFHTTPRequestOperation!, response: AnyObject!) -> Void in
            success?() // <- This appears to be trying to call
                       //    the parameter itself
        

那永远行不通。就像写作一样,

let add: () -> () =  add() 

这给出了错误error: variable used within its own initial value

我认为您收到的错误消息具有误导性,您需要为不调用自身的 successfailure 参数编写闭包。

【讨论】:

以上是关于可选类型 '()?' 的值未打开的主要内容,如果未能解决你的问题,请参考以下文章

可选类型“字符串?”的值未解包错误

可选类型 'NSURL?' 的值未拆封;你的意思是用'!'或者 '?'?

FBSDKGraphRequest:结果 - 可选类型“任何?”的值未拆封;你的意思是用'!'或者 '?'?

可选类型“字符串”的值未展开;你的意思是用'!或者 '?' [复制]

可选类型字符串的值?未打开

XCode 6 Beta 6 Beta 7 中的错误 - 可选类型的值未解包