我正在将我的ObjC代码转换为Swift并坚持使用此代码。
for (id<Delegate> object in Objects)
{
.......
......
}
非常感谢任何帮助!
感谢。
答案 0 :(得分:3)
你可以做这样的事情
for object in Objects {
guard let delegateObject = object as? Delegate else {
continue
}
// rest of your loop here
}
答案 1 :(得分:2)
你的Objective-C语法说你有一个名为Objects
的集合,对象符合一些名为Delegate
的协议。 Swift中的语法基本相同:
func callDelegateMethod(for objects: [Delegate]) {
for object in objects {
object.someDelegateMethod()
}
}
或
func callDelegateMethod(for objects: [Delegate]) {
objects.forEach { object in
object.someDelegateMethod()
}
}
注意,在这些示例中,我扩展了示例以显示如何声明objects
(即作为符合Delegate
协议的对象数组)。
如果您的objects
数组更加模糊,那么Delegate
的符合性无法在编译时确定(例如Any
的数组,或者你有什么),你可能需要施展它。例如,如果您知道objects
中的所有内容都符合Delegate
,则可以执行以下操作:
for object in objects as! [Delegate] {
object.someDelegateMethod()
}
但是,as!
可能很危险,因为如果任何一个演员表失败,它会崩溃。因此,如果任何对象可能不符合,则可以选择强制转换,例如
for object in objects {
if let object = object as? Delegate {
object.someDelegateMethod()
}
}
或者,使用compactMap
等功能方法(之前在9.3之前的Xcode版本中称为flatMap
)和forEach
来编写:
objects.flatMap { $0 as? Delegate } // use `compactMap` in Xcode 9.3 and later
.forEach { object in
object.someDelegateMethod()
}
答案 2 :(得分:1)
有两种可能的选择。
将代码粘贴到Swiftify等任何在线转换器中。
Edit-> Convert-> To modern swift code
然后你将获得几乎完全的快速2.2或3代码。