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

时间:2017-07-19 01:22:15

标签: objective-c swift swift3

我正在将我的ObjC代码转换为Swift并坚持使用此代码。

for (id<Delegate> object in Objects)
 {

    .......
    ......

}

非常感谢任何帮助!

感谢。

3 个答案:

答案 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等任何在线转换器中。

来自XCode

Edit-> Convert-> To modern swift code

然后你将获得几乎完全的快速2.2或3代码。