我正在将我的 ObjC 代码转换为 Swift 并卡在这个代码上。
for (id<Delegate> object in Objects)
{
.......
......
}
任何帮助将不胜感激!
谢谢。
你可以做这样的事情
for object in Objects {
guard let delegateObject = object as? Delegate else {
continue
}
// rest of your loop here
}
你的 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()
}
有两种可能的选项。
手动地
将您的代码粘贴到任何在线转换器中,例如 Swiftify.
来自 XCode
Edit-> Convert-> To modern swift code
然后你会得到几乎精确的 swift 2.2 或 3 代码。