美文网首页
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