可选类型 '()?' 的值未打开
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 '?'
【问题讨论】:
看起来像是编译器问题(可能是缓存)。报告的类型不正确,应该是(()->())?
,而不仅仅是()?
。编译器似乎认为failure
是Void
有没有办法清理缓存?
你可以删除xcode的缓存文件夹,它位于~/Library/Caches/Xcode/...之类的地方,你应该可以在SO上找到它。
我刚刚尝试了clean
、clean 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
我认为您收到的错误消息具有误导性,您需要为不调用自身的 success
和 failure
参数编写闭包。
【讨论】:
以上是关于可选类型 '()?' 的值未打开的主要内容,如果未能解决你的问题,请参考以下文章
可选类型 'NSURL?' 的值未拆封;你的意思是用'!'或者 '?'?
FBSDKGraphRequest:结果 - 可选类型“任何?”的值未拆封;你的意思是用'!'或者 '?'?