无法转换任何类型?要键入 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().map(JSON: objects as! [String : Any]) 如果有帮助,请接受我的回答,以便其他人在同一问题中获得优势

以上是关于无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时的主要内容,如果未能解决你的问题,请参考以下文章

Swift错误无法转换类型'(AFHTTPRequestOperation?,AnyObject?)->()的值

快速数组无法将“AnyObject”类型的值转换为预期的参数类型@noescape(AnyObject)抛出-> Bool

无法转换类型“[String : AnyObject]?”的值到预期的参数类型“[NSAttributedStringKey:Any]?”

Xcode 7 错误代码“无法转换值类型([AnyObject]

无法将类型 [NSObject : AnyObject] 转换为字符串

无法将“NSMutableDictionary”类型的值转换为预期的参数类型“[String: AnyObject]?”