zoukankan      html  css  js  c++  java
  • Swift开发第八篇——方法嵌套&命名空间

    本篇分为两部分:

    一、Swift中的方法嵌套

    二、Swift中的命名空间


    一、Swift中的方法嵌套

    在 swift 中我们可以让方法嵌套方法,如:

    func appendQuery(var url: String,
                         key: String,
                       value: AnyObject) -> String {
            
        func appendQueryDictionary(url: String,
                                       key: String,
                                     value: [String: AnyObject]) -> String {
            //...
            return "result"
        }
    
        func appendQueryArray(url: String,
                                  key: String,
                                value: [AnyObject]) -> String {
            //...
            return "result"
        }
                        
        func appendQuerySingle(url: String,
                                   key: String,
                                 value: AnyObject) -> String {
            //...
            return "result"
        }
                        
        if let dictionary = value as? [String: AnyObject] {
            return appendQueryDictionary(url, key: key, value: dictionary)
        } else if let array = value as? [AnyObject] {
            return appendQueryArray(url, key: key, value: array)
        } else {
            return appendQuerySingle(url, key: key, value: "value")
        }
    }

    二、Swift中的命名空间

       我们之前在使用 OC 开发时,它是没有命名空间的,所有的代码和引用的静态库最终都会被编译到同一个域和二进制中,这样的后果是一旦我们有重复的类名的话,就会导致编译时的冲突和失败。为了避免这种事情的发生,OC 的类型一般都会加上两到三个字母的前缀,比如 MJExtense,MJRefresh,MBProgressHUD 这样。但是前缀并不意味着保证能够不冲突,Swift 使用命名空间后为我们解决了该问题

    // MyFramework.swift
    // 这个文件存在于 MyFramework.framework 中
    public class MyClass {
        public class func hello() {
            print("hello from framework")
        }
    }
    // MyApp.swift
    // 这个文件存在于 app 的主 target 中
    class MyClass {
        class func hello() {
            print("hello from app")
        }
    }
    MyClass.hello()
    // hello from app
    MyFramework.MyClass.hello()
    // hello from framework

    另一种策略是使用类型嵌套的方法来指定访问的范围

    struct MyClassContainer1 {
        class MyClass {
            class func hello() {
                print("hello from MyClassContainer1")
            } }
    }
    struct MyClassContainer2 {
        class MyClass {
            class func hello() {
                print("hello from MyClassContainer2")
            } }
    }
    
    // 使用时:
    MyClassContainer1.MyClass.hello()
    MyClassContainer2.MyClass.hello()

    这样我们就可以避免去使用一些稀奇古怪的前缀了。

  • 相关阅读:
    反射和内置方法重写
    封装
    接口与抽象类 、多态
    面向对象--继承和组合
    python对象
    模块导入
    python序列化模块
    time random sys os 模块
    python re模块和collections
    python各种推导式
  • 原文地址:https://www.cnblogs.com/Jepson1218/p/5290288.html
Copyright © 2011-2022 走看看