我想知道如何将以下内容转换为Swift。我试过了,但却陷入了一个概念:
我使用属性 UICollectionViewLayoutAttributes
循环遍历所有对象[newVisibleItems enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes *attribute, NSUInteger idx, BOOL *stop) {
UIAttachmentBehavior *spring = [[UIAttachmentBehavior alloc] initWithItem:attribute attachedToAnchor:attribute.center];
spring.length = 0;
spring.frequency = 1.5;
spring.damping = 0.6;
[_animator addBehavior:spring];
[_visibleIndexPaths addObject:attribute.indexPath];
}];
Swift:标记为 * 的变量出现错误:
for (index, attribute) in enumerate(newVisibleIems) {
var spring:UIAttachmentBehavior = UIAttachmentBehavior(item: ***attribute***, attachedToAnchor: attribute.center)
spring.length = 0
spring.frequency = 1.5
spring.damping = 0.6
self.animator.addBehavior(spring)
self.visibleIndexPaths.addObject(attribute.indexPath)
}
***输入' AnyObject'不符合协议' UIDynamicItem'
我认为这是因为我没有告诉商品属性这是一个UICollectionViewLayoutAttributes。但我不确定如何写这个?
基本上,如何将Objective C转换为Swift?
答案 0 :(得分:1)
只要将newVisibleItems声明为[AnyObject]
,由于Swift的严格类型检查,您的代码将无法编译。
要确保newVisibleItems
是一个预期类型的数组,您必须将for
循环包装在一个向下转换中:
if let newVisibleItems = newVisibleItems as? [UIDynamicItem] {
for (index, attribute) in enumerate(newVisibleItems) {
...
}
}
如果这个错误的原因在UIKit内部,请确保Apple现在正在努力确保" swiftified"他们的框架版本返回一个正确的类型,而不是AnyObject!
s。