【问题标题】:How to convert this ObjC code to swift3?如何将此 ObjC 代码转换为 swift3?
【发布时间】:2017-07-19 01:22:14
【问题描述】:

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

for (id<Delegate> object in Objects)
 {

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

}

任何帮助将不胜感激!

谢谢。

【问题讨论】:

    标签: objective-c swift swift3


    【解决方案1】:

    你可以这样做

    for object in Objects {
         guard let delegateObject = object as? Delegate else {
            continue
        }
        // rest of your loop here
    }
    

    【讨论】:

      【解决方案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(以前在Xcode 9.3 之前的版本中称为flatMap)和forEach 之类的函数式方法编写:

      objects.flatMap { $0 as? Delegate }  // use `compactMap` in Xcode 9.3 and later
          .forEach { object in
              object.someDelegateMethod() 
      }
      

      【讨论】:

        【解决方案3】:

        有两种可能的选择。

        手动

        将您的代码粘贴到任何在线转换器中,例如Swiftify

        来自 XCode

        Edit-> Convert-> To modern swift code
        

        然后您将获得几乎完全相同的 swift 2.2 或 3 代码。

        【讨论】:

          猜你喜欢
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-19
          • 2019-05-26
          • 2018-06-24
          • 1970-01-01
          相关资源
          最近更新 更多