我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为AnyObject似乎很好.反正有没有避免看似不必要的铸造?

这是一个简单的例子,演示了我所看到的内容(在swift 1.2中)

protocol FooBar {

}

class Foo: FooBar   {

}

class Bar {

  let foo1: FooBar?
  let foo2: FooBar?

  init() {
    foo1 = Foo()
    foo2 = Foo()
    if foo1! as? AnyObject === foo2! as? AnyObject {  // this is fine

    }

    if foo1! === foo2!  {  // Birnary operator '===' cannot be applied to two FooBar operands

    }
  }

}
身份运算符===只能应用于引用,即类的实例.
如果符合FooBar协议的所有类型都是类
你可以把它声明为“类协议”
protocol FooBar : class { }

然后

if foo1! === foo2! { ... }

编译并按预期工作,因为编译器“知道”它两个操作数都是对类实例的引用.

我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?的更多相关文章

  1. ios – 如何在swift3中增加String.Index?

    在swift2.3中运算符用于string.index增加例如.一世我改为swift3代码发生了“一元运算符”不能应用于’@valueString.Index’类型的操作数(又名’@lvalueString.CharacterView.Index’)“在swift3中我改写了例如.i=1但是这段代码无法解决.请帮我.解决方法String.Index是String.CharacterView.Ind

  2. 泛型 – 比较通用结构类型

    如何确定通用结构的两个实例是否是相同类型?例如,给定以下结构:并且以下片段:我如何确定foo,bar或baz是相同或不同类型?

  3. 我们可以测试符合相同协议的对象在swift中是否完全相同而不进行转换?

    我试图测试从工厂生成的两个对象是否相同,但编译器似乎不允许对仅符合相同协议的对象进行身份检查.然而,将这两个对象转换为AnyObject似乎很好.反正有没有避免看似不必要的铸造?这是一个简单的例子,演示了我所看到的内容身份运算符===只能应用于引用,即类的实例.如果符合FooBar协议的所有类型都是类你可以把它声明为“类协议”然后编译并按预期工作,因为编译器“知道”它两个操作数都是对类实例的引用.

  4. php – Zend setElementsBelongTo()对子表单元素的影响

    先谢谢你!

  5. SimpleTest:如何断言抛出PHP错误?

    如果我是正确的,SimpleTest将允许您断言PHP错误被抛出.但是,根据文档,我无法弄清楚如何使用它.我想声明我传递给构造函数的对象是MyOtherObject的一个实例我哪里错了?

  6. CentOS上配置rsyslog客户端用以远程记录日志

    rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。步骤三:让Rsyslog进程自动启动要让rsyslog客户端在每次系统重启后自动启动,请运行以下命令:CentOS7:CentOS6:小结在本教程中,我演示了如何将CentOS系统转变成rsyslog客户端以强制它发送日志消息到远程rsyslog服务器。不管在任何情况下,都不要配置rsyslog客户端将日志消息通过不安全的网络转发,或者,特别是通过互联网转发,因为syslog协议是一个明文协议。

  7. 如何将PHP的crc32哈希转换为MySQL等价?

    显然MySQL的CRC32()函数返回一个无符号的BIGINT,而PHP返回十六进制值.在PHP中:hash==7813f744在MysqL中:SELECTCRC32==222957957CRC32值存储在CHAR列中.我无法弄清楚如何将PHP生成的哈希转换为MysqL仅用sql生成的相同值.显而易见的似乎不起作用:SELECTHEX==D4A1185SELECTCONV==2014574404有任何想法吗?如果你有64位平台,你可以安全地使用PHP中的crc32函数和MysqL中的CRC32.快速测试:

  8. 正则表达式 – 如何逃避加号在mac os x(BSD)sed?

    我试图找到并替换一个或多个出现的字符使用sed从mac,从BSD一般命令sed.我试试:期待看到:而是我看到我当然可以手动扩展加号:但是为了得到加号,我该怎么办?使用/g标志,s/o//g就足以取代所有o的出现.为什么不按预期工作:在旧的,过时的re是一个普通的字符(以及|,?).您应该指定-E标志以使其使用现代正则表达式:资料来源:man7re_format.

  9. regex – 如何在正则表达式中的多行匹配任何字符?

    例如,这个正则表达式将匹配:但是如何让它匹配多行?它取决于语言,但应该有一个修饰符,您可以添加到正则表达式模式。在PHP中,它是:最后的s使点与包括换行符的所有字符匹配。

  10. PHP / PDO:准备语句在创建表时不起作用?

    当我使用PDO预处理语句,并使用它来插入查询失败的表名时,一个简单的例子:它所做的只是替换?使用’table_foobar’,单引号不允许为我创建表格!我最终需要在预准备语句的TOP上执行sprintf以添加预定义的表名.我到底在这里错过了什么?我在手册中找不到任何明确的内容,但是查看用户贡献的注释,参数的使用仅用于实际值,而不是表名,字段名等.应该使用正常的字符串连接.

随机推荐

  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,所以编译器会报错,现在来一一解决。

返回
顶部