美文网首页
Swift中有关于类中的内嵌类的分类写法

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

作者: seasonZhu | 来源:发表于2019-06-06 15:56 被阅读0次

    之前在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"
        }
    }
    

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

    相关文章

      网友评论

          本文标题:Swift中有关于类中的内嵌类的分类写法

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