无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时
Posted
技术标签:
【中文标题】无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时【英文标题】:Cannot convert type Any? To type AnyObject? When converting to swift 4 from swift 3 【发布时间】:2019-04-26 09:44:32 【问题描述】:试图让我的代码从 swift 3 编译到 swift 4。
我正在使用 ObjectMapper:ObjectMapper FROM Github
我收到以下 2 条错误消息
在强制错误中无法将类型“Any?”的值转换为类型“AnyObject?” 可选链没有效果,表达式已经产生'Any?'
let likesRequest = FBSDKGraphRequest(graphpath: "/me/likes", parameters: ["fields": "id, name, picture, user_likes", "after": after!])
let _ = likesRequest?.start() (connection : FBSDKGraphRequestConnection?, result2 : Any?, error : Error?) -> Void in
let facebookLikes = Mapper<FacebookLikesListObject>().map(JSON: result2 as AnyObject?)
FacebookLikesListObject.swift
import UIKit
class FacebookLikesListObject: Mappable
var likes : [FacebookLikeObject]?
var after : String?
var before : String?
required init?(map: Map)
func mapping(map: Map)
likes <- map["data"]
after <- map["paging.cursors.after"]
before <- map["paging.cursors.before"]
```
【问题讨论】:
【参考方案1】:Any
用于结构和/或类
而AnyObject
仅用于类。
您可以安全地从AnyObject
向上转换为Any
,但不能反其道而行之。
因此,您可以尝试安全地投射到 AnyObject
if let downCastedResult2 = result2 as? AnyObject
let facebooklikes = Mapper.map(JSON: downcastedResult2)
else
//fallback
或
你可以强制施法
let facebookLikes = Mapper<FacebookLikesListObject>().map(JSON: result2 as! AnyObject)
【讨论】:
【参考方案2】:你可以使用下面的代码。
guard let objects = result2 as? AnyObject else return
let facebookLikes = Mapper<FacebookLikesListObject>().map(JSON: objects)
【讨论】:
这行得通。非常感谢。守卫让对象=结果2作为? AnyObject else return let facebookLikes = Mapper以上是关于无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时的主要内容,如果未能解决你的问题,请参考以下文章
Swift错误无法转换类型'(AFHTTPRequestOperation?,AnyObject?)->()的值
快速数组无法将“AnyObject”类型的值转换为预期的参数类型@noescape(AnyObject)抛出-> Bool
无法转换类型“[String : AnyObject]?”的值到预期的参数类型“[NSAttributedStringKey:Any]?”
Xcode 7 错误代码“无法转换值类型([AnyObject]
无法将类型 [NSObject : AnyObject] 转换为字符串
无法将“NSMutableDictionary”类型的值转换为预期的参数类型“[String: AnyObject]?”