Могу ли я предоставить функцию Swift для React Native без использования Objective- C (чистый swift)? - PullRequest
0 голосов
/ 19 марта 2020

Интересно, смогу ли я выставить свой func navigateToLoginWidget на React Native? Так что его можно вызвать из RN.

Мне удалось изменить шаблон Objective- C, который поставляется с React Native to Swift, следующим образом:

import Foundation
import IBMCloudAppID
import BMSCore

import UIKit

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

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    // initializing App ID SDK
    let region = AppID.REGION_SOMEWHERE
    let backendGUID = "MY_TENANT_ID_FROM_IBM"
    AppID.sharedInstance.initialize(tenantId: backendGUID, region: region)
    
    // Initializing React Native front-end with Swift instead of Obj-c template
    let jsCodeLocation: URL

    jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index.js", fallbackResource:nil)
    let rootView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "MY_PROJECT_NAME", 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, open url: URL, options :[UIApplication.OpenURLOptionsKey : Any]) -> Bool {
      return AppID.sharedInstance.application(application, open: url, options: options)
  }
  
  func navigateToLoginWidget(_ sender : Any) {
    print("clicked")
    AppID.sharedInstance.loginWidget?.launch(delegate: SigninDelegate)
  }
  
}

Обычно я имел бы эту функцию в другом модуле под названием SigninDelegate.swift, но я включил ее в тот же класс для пояснительных целей.

1 Ответ

0 голосов
/ 19 марта 2020

Согласно официальной документации :

Swift не поддерживает макросы, поэтому для его установки в React Native требуется немного больше настроек, но он работает примерно так же.

Так что да, это возможно, но необходима некоторая настройка. Проверьте документы по ссылке выше для шагов, которые необходимо выполнить, чтобы настроить его.

...