美文网首页
Swift之Any、AnyClass、AnyObject

Swift之Any、AnyClass、AnyObject

作者: JerrySi | 来源:发表于2019-07-30 11:21 被阅读0次

最近面试了很多人,发觉大家对这3个类型不是很关注,即是了解的也不清楚什么时候该用。

是什么

  1. AnyObject:所有的class都隐式的实现了这个接口。为了兼容OC,原来的id用AnyObject来进行替代。
  2. Any:范围更广,代表除函数外任何类型的实例。不仅包含object对象,还包含基本类型,真正用于Swift中的类型。
  3. AnyClass: 属于AnyObject.Type的别名,表示任意类的元类型 typealias AnyClass = AnyObject.Type

用法

AnyObject本质上还是NSObject,所以在Swift中AnyObject应该被舍弃,在Swift中应该使用Any
比如:Array<AnyObject>,这个数组只能添加OC中对象,而Swift中结构体、枚举等是添加不了的。

AnyClass可能有部分人觉得用的很少,其实不然,如果你的项目耦合度拆分的很好的话是会用到的。

  1. Dictional Model解析的时候,从后端返回的时候,需要解析成特定Model使用。
public func mapModel<T: BaseModel>(_ type: T.Type) throws -> T {
        let model = BaseModel.parseDictionaryModel(self, modelClass: type)
        guard let goodModel = model as? T else {
            throw RxCocoaError.unknown
        }
        return goodModel
    }

上面代码只需要传递一个需要解析成的Model类型就可以实现特定的Model解析。

  1. 项目中使用组件化开发的时候。

  2. 页面需要返到特定页面的时候,我们经常会遇到点击页面某个按钮去处理一个流程,等流程处理好了,再返回当前页面。通用的做法一般2种:把需要的返回页面VC对象一层一层传递下去;用个通知。

这里我采用第3种方式进行跳转:

public class func popToTheViewControllerType(_ vcType: AnyClass) -> UIViewController? {
        if let nvc = getCurrentNav() {
            for temp: UIViewController in nvc.viewControllers {
                if type(of: temp) == vcType {
                    nvc.popToViewController(temp, animated: true)
                    return temp
                }
            }
        }
        return nil
    }

使用的时候只需要传递需要跳转的AnyClass,比如PointMallsManagerVC.self即可。

相关文章

网友评论

      本文标题:Swift之Any、AnyClass、AnyObject

      本文链接:https://www.haomeiwen.com/subject/rapgrctx.html