extension PageVIEwController : UIPageVIEwControllerDelegate { func pageVIEwController(pageVIEwController: UIPageVIEwController,willTransitionToVIEwControllers pendingVIEwControllers: [AnyObject]) { let controller: AnyObject? = pendingVIEwControllers.first as AnyObject? self.nextIndex = self.vIEwControllers.indexOf(controller) as Int? } }
我尝试过使用Swift 1.2这种方法:
func indexOf<U: Equatable>(object: U) -> Int? { for (IDx,objectToCompare) in enumerate(self) { if let to = objectToCompare as? U { if object == to { return IDx } } } return nil }
解决方法 我们需要将我们正在测试的对象转换为UIVIEwController,因为我们知道控制器数组正在保存UIVIEwControllers(我们知道UIVIEwControllers符合Equatable.
extension PageVIEwController : UIPageVIEwControllerDelegate { func pageVIEwController(pageVIEwController: UIPageVIEwController,willTransitionToVIEwControllers pendingVIEwControllers: [AnyObject]) { if let controller = pendingVIEwControllers.first as? UIVIEwController { self.nextIndex = self.vIEwControllers.indexOf(controller) } }}
错误背后的逻辑是,为了让indexOf方法比较传入的对象,它必须使用==运算符对它们进行比较. Equatable协议指定该类已实现此函数,因此这是indexOf要求其参数符合的内容.
Objective-C没有相同的要求,但实际的Objective-C实现最终意味着使用isEqual:方法(NSObject,因此所有Objective-C类实现)将参数与数组中的对象进行比较.
总结以上是内存溢出为你收集整理的ios – [AnyObject]数组的swift indexOf全部内容,希望文章能够帮你解决ios – [AnyObject]数组的swift indexOf所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)