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

Swift Beta 5中的bridgeToObjectiveC和makeObjectsPerformSelector

伍嘉
2023-03-14
问题内容

我在Xcode 6 Beta 4中使用了带有完成处理程序的代码,而该处理程序在Xcode 6 Beta 5中不再起作用。

dropsToRemove.bridgeToObjectiveC().makeObjectsPerformSelector("removeFromSuperview")

完整的方法…

func animateRemovingDrops(dropsToRemove: [UIView]) {
    println(__FUNCTION__)
    UIView.animateWithDuration(1.0,
        animations: {
            for dropView in dropsToRemove {
                let x = CGFloat(UInt(arc4random_uniform(UInt32(UInt(self.gameView.bounds.size.width) * 5)))) - self.gameView.bounds.size.width * 2
                let y = self.gameView.bounds.size.height
                dropView.center = CGPointMake(x, -y)
        }}, completion: { finished in
                dropsToRemove.bridgeToObjectiveC().makeObjectsPerformSelector("removeFromSuperview")
        })
}

错误是“ [UIView]”没有名为“ bridgeToObjectiveC”的成员

请注意,该方法中的CGFloat和Uint强制转换是针对beta 4的解决方法,我只是尚未更新该部分。

我认为处理完成处理程序的解决方案可能是将数组视为NSArray,如下所述:
makeObjectsPerformSelector的快速等效项是什么

(dropsToRemove as NSArray).makeObjectsPerformSelector("removeFromSuperview")

但是,假设我正确使用了语法,只会导致另一个错误“ makeObjectsPerformSelector”不可用:“
performSelector”方法不可用

这是Swift的新错误,还是发行说明中缺少的内容?


问题答案:

bridgeToObjectiveCbridgeFromObjectiveC当你需要使用该类型的API迅捷的对象上的功能都没有在Xcode
6.0测试版5.相反,演员从相应的基金会类型/可用。例如:

var arr = ["One", "Two"]
(arr as NSArray).indexOfObject("One")

performSelector自从第一个Swift测试版以来,Apple就警告您(或明确使其不可用)使用和相关方法。可能是在Beta
5之前仍然可用的任何此类API都是无意的。

正如您提到的问题所指出的,您可以使用map它在数组的每个元素上调用函数/方法。您也可以使用filterfindfor-
in循环,或在强制转换为NSArray之后的一种enumerateObjects方法。请注意,许多人认为它不好的风格使用的编程功能,结构(mapfilterreducefind对于不属于“功能性”的任务)
-也就是运行有代码的副作用。因此,for-
in循环可能是您要做的最干净的方法。



 类似资料:
  • 原文链接:scarletsky 的 blog ~ 的作用 在查询 commit 编号的时候,一般会执行以下操作: git log --graph --oneline * 90055c5 update 2016年12月30日 星期五 18时34分58秒 CST * 031b9f2 Update README.md * 71b62a9 Update README.md * 8f17f7e Updat

  • 我正在解析数据从mysql到我的IOS swift应用程序使用Alamofire,数据是整数,我把它们取到文本字段,然后我会对它们做一些计算,我成功地加载了数据,但问题是它们不能分配到文本字段! } 我得到这个错误不能将“int”类型的值分配给加粗线上的“string”类型

  • 问题内容: 首先,是的,这是给课堂上的作业,但是我对它如何运行的缺乏了解比我想要的要高。 我们给了3类,它们是以下: SLinkedList.java 节点java 包chapter3.linkedList; 和GameEntry.java 在过去的3个小时中,我一直在听他的演讲,阅读了文本(数据结构和算法第5版),并浏览了互联网论坛和youtube视频,但是我似乎对如何利用节点/链表类。 分配的

  • 问题内容: 我正在编写一个小型Grails应用程序,并且在运行以下相当简单的代码时,我继续获得StaleObjectStateException:s约占“ createfoo”调用的1/10:th。很可能我错过了使用GORM的最佳方法。 这是代码: 我对GORM最佳做法的疑问: “ if-validate()-then-save()-else-discard()”是否是在GORM中持久保存新对象的

  • 问题内容: Java中的ConcurrentHashMap和Hashtable有什么区别? 对于线程化应用程序,哪个更有效? 问题答案: 使用多个存储桶来存储数据。这样可以避免读取锁定,并大大提高了性能。两者都是线程安全的,但是使用显然可以赢得性能。 从using 读取时,没有锁,与之相反,所有操作都只是简单地同步了。 在Java的旧版本中发布,而Java 5+ 则是。 在单线程应用程序中使用是最

  • 问题内容: 我一直在对此进行一些研究,但至少可以说我还是很困惑。 谁能给我一个何时使用以及何时使用的具体示例;?到底有什么区别?何时使用这些方法是否有黄金法则? 如果我错了,也可以纠正我,但是这两个“对象”不是在GUI主线程内(用于更新GUI)创建另一个线程的方法吗? 问题答案: 使用快速和简单的操作和复杂的和大的操作。 用例 用例中的任务示例 示例:为什么我们不能用于长计算(摘自以下参考资料)。