转自

  • Swift设计模式

原文

  • Design-Patterns-In-Swift
// 保护代理模式
// 百度百科:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
// 设计模式分类:结构型模式

/** * 电脑接口 */
protocol PC {
    func connect(ip: String) -> Bool
}

/// 电脑实现
class MyPC: PC {
    func connect(ip: String) -> Bool {
        print("connect to \(ip)")
        return true
    }
}

/// 代理实现
class MyProxy: PC {

    var pc: MyPC!

    init(pc: MyPC) {
        self.pc = pc
    }

    func connect(ip: String) -> Bool {
        if ip == "10.10.10.10" {
            print("\(ip) has been limited")
            return false
        } else {
            pc.connect(ip)
            return true
        }
    }
}

let pc = MyPC()
let proxy = MyProxy(pc: pc)

proxy.connect("1.2.3.4")
proxy.connect("10.10.10.10")

Swift设计模式之保护代理模式的更多相关文章

  1. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?(一定要看!)

    这篇文章主要介绍了css绝对定位如何在不同分辨率下的电脑正常显示定位位置,本文首先解释了常见的电脑分辨率,为了页面在不同的分辨率下正常显示,要给页面一个安全宽度,再去使用绝对定位,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。

  2. ios – Xcode项目在文档大纲中显示为灰色

    我一直在使用iCloud来“同步”我正在从我的笔记本电脑到桌面的Xcode项目.不幸的是,它似乎没有那么好用.我今天在台式机上打开了一个项目,我昨天在笔记本电脑上工作.如果我在桌面上打开文件,则会丢失故事板中的某些按钮和标签.看看文档,我可以看到这些,但它们是灰色的(见图).但是,当我构建文件时,它们在模拟器中显示为正常.知道为什么或如何让它们正常出现?

  3. ios – Xcode 9.2模拟器调试中断;无法附加到进程ID

    iOS模拟器上的Xcode9.2调试对我来说已经彻底破坏了.我花了几个小时研究这个问题并尝试了大量的建议,但没有完全擦除我的硬盘并开始安装新的操作系统.我最终向Apple提交了一个错误.如果有人遇到此问题并有任何建议,请在此处发布.摘要:尝试使用调试可执行文件在调试模式下构建和运行时.模拟器只将应用程序打开到白色屏幕,然后Xcode弹出错误:重现步骤:制作任何项目并尝试在任何模拟器上运行.预期成绩

  4. 在Xcode服务器中找不到代码签名标识

    使用Xcode7B4和Server5B4与Carthage项目.要构建项目,我需要首先构建它的依赖项.所以我使用以下代码向bot添加了BeforeIntegration步骤:自己运行一切都有效.但是当机器人运行时,我得到了这个:CodeSignerror:Nocodesigningidentitiesfound:Novalidsigningidentities(i.e.certificateand

  5. 可可 – NSTimer中的代码可防止自动睡眠

    我在我的应用程序中运行了一个NSTimer,它收集一些数据并定期发送到服务器.在生产中,计时器将每隔几个小时发射一次.我担心干扰自动睡眠.在测试中,计时器和睡眠时间的某些组合完全阻止自动睡眠–显示器休眠,系统保持运行.将我的NSTimer设置为一分钟始终会停止它.一些Mac应用程序因运行时干扰自动睡眠而臭名昭着.什么操作会阻止系统进入睡眠状态?

  6. xcode – 今天OS X上的Widget无法正常工作

    解决方法好的终于找到了问题.我手工编写了我的应用程序,因为我有一个应用程序依赖的复杂框架,需要使用copy/Runscript后构建脚本手工复制它们.无论如何,它似乎至少从Xcode7开始,这不再像预期的那样工作.应用程序的工作原理和协同设计说应用程序已经正确签名,但很明显,幕后发生的事情正在打破代码签名.我最终删除了所有手动代码签名的东西,只需使用Xcode的“复制框架”构建后步骤并选中“登录复制”.它现在终于按预期工作了.

  7. 反应原生 – 如何通过Xcode构建React Native iOS应用程序到设备?

    我试图将AwesomeProject应用程序构建到设备上.构建成功并启动屏幕显示,但后来我看到一个红色的“无法连接到开发服务器”屏幕.它表示“确保节点服务器正在运行–从Reactroot运行”npmstart“.看起来节点服务器已经运行,因为当我做npm启动时,我收到一个EADDRINUSE消息,表示该端口已经在使用.解决方法从设备访问开发服务器您可以使用开发服务器快速迭代设备.要做到这一点,你的

  8. xcode – Mac OSX Lion / X11 / CImg库

    所以我试图将CImg图像编写库并入到我的XCodeproject中但是,库的头文件包含以下包含,XCode给出了此错误警告:我的笔记本电脑正在运行OSXLion10.8.2,显然,苹果拿走了X11的Lion,所以我去了thissite,下载了XQuartz,因为这是AppleSupportpage所说的.所以在安装之后,我重新启动了我的电脑,并尝试运行我的XCode项目,但我仍然得到相同的确切的错

  9. 调试 – iOS设备上的remote console.log()

    我正在开发涉及touchEvent的网络应用程序.如果我可以在我的Mac上远程查看控制台,那么调试它会更容易一些.我可以在iOS设备上使我的MobileSafari将控制台日志存储在系统中的某个位置.我已经越狱了我的iPad.谢谢!

  10. ios – 有没有办法加速iPad模拟器的OpenGL性能?

    iPad模拟器太慢,无法测试OpenGL图形.有没有办法让它更快?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部