如何将此方法从 Objective-C 转换为 Swift?

Posted

技术标签:

【中文标题】如何将此方法从 Objective-C 转换为 Swift?【英文标题】:How to convert this method from Objective-C to Swift? 【发布时间】:2020-01-20 14:39:01 【问题描述】:

我正在尝试将 React-native Firebase 文档中的方法从 Objective-c 代码转换为 Swift。但它不起作用,有人可以帮我吗?

我关注的文档:https://rnfirebase.io/docs/v4.3.x/notifications/ios

这是我要转换并添加到 Swift 文件中的 Object C 部分:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
  [[RNFirebaseNotifications instance] didReceiveLocalNotification:notification];

目前,这是我的代码,请参阅注释部分:

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 
  var window: UIWindow?
  var bridge: RCTBridge!

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
    FirebaseApp.configure()
    RNFirebaseNotifications.configure()

    let jsCodeLocation: URL

    jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource:nil)
    let rootView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "Zepplin", initialProperties: nil, launchOptions: launchOptions)
    let rootViewController = UIViewController()
    rootViewController.view = rootView

    self.window = UIWindow(frame: UIScreen.main.bounds)

    self.window?.rootViewController = rootViewController
    self.window?.makeKeyAndVisible()

    return true
  

  /*func application(_ application: UIApplication, didReceiveLocalNotification notification: [UILocalNotification: Any]?) -> Any 
    RNFirebaseNotifications.instance(_, didReceiveLocalNotification, notification)
  */


但事实上,它不起作用,因为语法错误......我不熟悉 Swift。 有人可以帮帮我吗? 我会很高兴!先谢谢了!!!

编辑:

对不起,如果我的问题不够清楚。对我来说,问题是“如何修正语法?”,我知道语法是错误的。我的问题没有什么要补充的,Xcode 给我的错误是意料之中的,很明显,因为我不了解 Objective-C,也不了解 Swift,我正在尝试以我的方式。即使我将错误添加到问题中,我也确信其他内容也会出错。这就是为什么我问是否有人可以为我转换它,它只有几行,所以我想我并没有要求太多。

感谢@bsod,您在评论中提到了您发布的工具!这正是我需要的工具。我不知道有这样的工具存在。

感谢所有帮助过我的人。

【问题讨论】:

请解释究竟是什么不起作用。什么是预期的结果,你会得到什么。你得到一个编译错误? 是的,我遇到了编译错误。 XCode 给了我语法错误。我不知道如何将第一个代码转换为 Swift 代码。我试过。 Swift代码的注释部分是我的尝试,但是语法错误,我不知道如何更正。它只是将 Objective-C 转换为 Swift,这就是为什么我认为了解 Objective-C 和 Swift 的人可以轻松地将其转换。 但是你怎么知道是错的,是不是报错了?正如 Li 在下面所写,该方法已被弃用 - 另请参阅 Apple 文档? 是的,我在编译之前在 Xcode 中遇到错误,编辑器显示红线,我知道可能整个函数(我发布的 Swift 代码的注释部分)是错误的,正如我所描述的,存在语法错误,我尝试将 Objective C 代码转换为 Swift,但没有成功 @bsod 谢谢!!!这正是我所需要的。我刚刚使用您推荐的工具转换了我的代码,并且转换工作正常,在我的项目中正确编译了所有内容,并且我的应用程序正在运行。你摇滚!! 【参考方案1】:
func application(_ application: UIApplication, 
           didReceive notification: UILocalNotification)

但这种方法已被弃用。您可能需要考虑迁移到“UNUserNotificationCenter”相关的 API。

【讨论】:

是的,也许它已被弃用,但现在,我只想从这里关注文档:rnfirebase.io/docs/v4.3.x/notifications/ios 如果它有效,那就太好了!他们的项目处于活动状态,并且正在更新已弃用的代码。很快我将不得不修复这些过时的东西,但现在,我只需要让它工作。你知道怎么做吗? 我遇到的问题是,他们在文档中解释了如何在 Objective-C 中设置项目,但我的项目是用 Swift 编译的,因为我需要 Swift 用于特定目的 是的。只需将那个委托函数声明替换为我提供的那个,就可以了。 :) 是的,感谢您的帮助!但我不知道如何将这部分 Objective-C 代码放入您提供的 Swift 范围内:[[RNFirebaseNotifications instance] didReceiveLocalNotification:notification];,这是我当前的代码:ibb.co/41RZnV6 您是否将 Objective-C 桥接头添加到您的项目中?你需要这样做。完成后,Xcode 的智能感知实际上可以帮助您键入该语句。它应该类似于 RNFirebaseNotifications.instance().didReceiveLocalNotification(notification)

以上是关于如何将此方法从 Objective-C 转换为 Swift?的主要内容,如果未能解决你的问题,请参考以下文章

将json调用语法从Objective-C转换为Swift的正确方法是啥?

如何将 .hour() 和 .minute() 从 Swift 转换为 Objective-C?

如何在objective-c中将字节值转换为int

将UILabel子类从Objective-C转换为Swift

如何将UIImagePicker图像转换为字节数组objective-c

将 Objective-C 方法转换为 Swift [关闭]