如何将此 ObjC 代码转换为 swift3?



我正在将我的 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 代码。

最新更新