• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift开发第八篇——方法嵌套&命名空间

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本篇分为两部分:

一、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()

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift截取字符串发布时间:2022-07-18
下一篇:
Swift---Swift5基本语法发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap