当前位置: 首页 > 面试题库 >

AnyObject在Xcode8 beta6中不起作用?

阎昌勋
2023-03-14
问题内容

在Xcode8 beta6中,以下代码将引发警告:’is’测试始终为true。但是它不会打印通行证。

    struct TestStruct {
    }

    //warning: 'is' test is always true
    if TestStruct() is AnyObject {
        print("pass")
    }

并且以下代码将引发警告:从“ T”到“ AnyObject”的条件强制转换始终成功

html" target="_blank">public static func register<T>(_ protocolType: T.Type, observer: T) {

    //Warning: Conditional cast from 'T' to 'AnyObject' always succeeds
    guard let object = observer as? AnyObject else {
        fatalError("expecting reference type but found value type: \(observer)")
    }
    //...
}

问题答案:

该警告按预期起作用: 但是,false返回TestStruct() is AnyObject

此答案的先前版本认为有警告,

‘是’测试总是正确的

作为错误,并讨论了为什么会出现这种错误的警告。但是,在运行时TestStruct() is AnyObject评估为false,这被认为是预期的行为。

给定OP(SR-2420)提交的错误报告的注释,情况似乎相反:由于Xcode
8 / beta 6,is测试 始终评估为true,而OP:s发布的错误就是事实该TestStruct() is AnyObject计算结果为false运行时。

乔·格罗夫写道:

这是正确的,因为所有内容都桥接到了AnyObject现在。

is/ as AnyObject现在对于所有类型总是成功的。它的行为符合预期。

SwiftValue 从Swift值转换为Obj-C对象的新框

(有关其他详细信息,请参阅下面的评论中的讨论,谢谢@MartinR)

似乎未明确实现为可通过_ObjectiveCBridgeable(例如)遵循_ObjectiveCBridgeable
Swift值可与Obj-C对象桥接(取而代之的是,),而是自动使用新SwiftValue框来允许转换为Obj-
C对象。

swift / stdlib / public / runtime /
SwiftValue.mm的初始提交消息为:

运行时:实现一个不透明的“ SwiftValue” ObjC类来保存桥接值

如果没有更好的将Swift值映射到Objective-C对象以进行桥接的目的,我们可以退一步将值装在类中。除了NSObject在Objective-
C中符合- 之外,此类没有任何公共接口,但是可以被Swift运行时识别,因此可以将其动态地转换回盒装类型。



 类似资料:
  • 我有一些 在量角器中,我们搜索并找到元素,检查文本是否符合我们的期望,然后对该元素调用。测试在Chrome中运行良好,但在IE中就好像没有点击发生一样。破坏了测试。 IE 11是否支持点击

  • 问题内容: 我注意到less.js在firefox中工作,但在Chrome中不工作,或者是因为我出错了吗? 即使我尝试在Chrome中仍然无法使用,我在某个地方犯了错误吗? 问题答案: 通过您提供的链接: 如果您使用的是Chrome,Less.js浏览器脚本当前将无法使用,并且由于已知的Chrome问题,网页的路径以“file:///”开头。

  • 问题内容: 不仅如此,其他代码也有相同的问题。只是不能使用ImageView。 环境:macOS,IntelliJ 造成原因:java.lang.IllegalArgumentException:无效的URL:无效的URL或找不到资源 问题答案: 该图像构造函数接受一个url作为参数。如果您未在其中添加协议,则它将假定该项目来自类路径。显然,不会出现在您的类路径中。 要从文件而不是类路径中读取,请

  • 问题内容: 当我迅速运行此代码时,我不知道为什么应用程序会在“ alertView.show()”部分显示一个断点而终止,请有人帮帮我。 问题答案: 从Xcode 6.0 UIAlertView类: 不推荐使用UIAlertView。改用UIAlertController和UIAlertControllerStyleAlert的preferredStyle。 在Swift(iOS 8和OS X 1

  • 问题内容: 我已经动态创建了一个复选框。我曾经在单击复选框时调用过一个函数,该函数在Google Chrome和Firefox中有效,但 在Internet Explorer 8中不起作用 。这是我的代码: 是我的事件处理程序。 问题答案: 尝试: 更新: 对于IE9之前的InternetExplorer版本,应使用attachEvent方法将指定的侦听器注册到调用它的EventTarget上,对

  • 问题内容: 我在Linux GCC中使用了fflush(),但是没有用。该功能还有其他选择吗?这是我的代码: 我得到的输出是: 然后程序结束。就这样。我可以在Linux中做什么?有替代功能吗? 问题答案: 不要使用fflush,而是使用以下函数: 取决于实现,但是此功能始终有效。在C中,使用是不当做法。