Swift中有关于类中的内嵌类的分类写法

2019-06-06  本文已影响0人  seasonZhu

之前在swift中在类中定义了一个内嵌类,想要对这个内嵌类进行协议扩展,之前一直都不知怎么写好,后来发现原来是被自己的无知蒙蔽了双眼,系统中有已经有很多这样的写法了.
典型的就是通知

extension Notification.Name {
    public static let TestNotificationName = Notification.Name("TestNotificationName")
    
    struct MyOperation {
        static let operation1 = Notification.Name("operation1")
    }
}

当我想为自己的通知名进行管理式的扩展时,其实就可以写一个Notification.Name的分类,然后在通过内嵌类对不同业务的通知名进行分门别类,便于查找和管理.

所以我老是想下面这样的需求时,反而进入了死胡同,真是可笑.

class Animal {
    struct Cell {
        
    }
    
    extension Cell: CustomStringConvertible {
        var description: String {
            return "cell"
         }
    }
}

上面的写法是错误的,编译器会报错Declaration is only valid at file scope

于是我经常就这么写了

class Animal {
    struct Cell: CustomStringConvertible {
        var description: String {
            return "cell"
        }
    }
}

但是一旦我的Cell需要遵守很多协议的时候,那么我就不得不在定义Cell的位置,写一堆继承关系,这样到底是怎么协议实现什么样的方法根本就搞不清楚,业务不明.

于是其实主流的写法就是这样的:

class Animal {
    struct Cell {
        
    }
}

extension Animal.Cell: CustomStringConvertible {
    var description: String {
        return "cell"
    }
}

其实第一中错误的写法是我最想表现的,当然第一种方式也会有看不清,不过最后一种算是一种折中的方式,建议按照这样的写法写内嵌类的分类.

上一篇下一篇

猜你喜欢

热点阅读