簡體   English   中英

Swift中的Objective-C AppAuth OIDAuthorizationService類,以及Objective-C-> Swift翻譯

[英]Objective-C AppAuth OIDAuthorizationService class in Swift, and Objective-C -> Swift translation

我需要在SwiftAppAuthhttps://github.com/openid/AppAuth-iOS )庫中聲明類型為OIDAuthorizationService的變量,同時將以下Objective-CSwift以在AppAuth中使用Objective-C庫項目。

預翻譯目標

。H

+ @protocol OIDAuthorizationFlowSession;

  @interface AppDelegate : UIResponder <UIApplicationDelegate>
+ @property(nonatomic, strong, nullable) 
id<OIDAuthorizationFlowSession> currentAuthorizationFlow;
  @property (nonatomic, strong) UIWindow *window;
  @end

.m

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<NSString *, id> *)options {
  if ([_currentAuthorizationFlow resumeAuthorizationFlowWithURL:url]) {
    _currentAuthorizationFlow = nil;
    return YES;
  }
  return NO;
}

到目前為止,我的翻譯如下:

  var currentAuthorizationFlow: OIDAuthorizationFlowSession?

  ...

  func application(_ application: UIApplication, openURL: NSURL,
                       didFinishLaunchingWithOptions launchOptions: 
 [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if currentAuthorizationFlow!.resumeAuthorizationFlow(with: openURL as URL) {
      return true
    }
    return false
  }

此代碼正確嗎?

錯誤是: Use of undeclared type: 'OIDAuthorizationFlowSession' ,如所期望的, 我該怎么做?

非常感激

我知道OIDAuthorizationFlowSession協議是在Objective-C中定義的,並且您正在嘗試在Swift中使用它,如果是這種情況,則需要Bridging-Header.h,可以在其中導入OIDAuthorizationFlowSession的相應標頭。

如何創建橋接頭文件? 好吧,當您創建新的swift文件時,應該自動創建它,如果不是這種情況,請在此處查看: https : //developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

如果簡單方法不起作用,請參閱以下內容: Xcode是否不會自動創建橋接頭?

LE:如果您將AppAuth-iOS集成為Pod,這就是100%有效的方法:

import UIKit
import AppAuth

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    var currentAuthorizationFlow: OIDAuthorizationFlowSession?

    func application(_ application: UIApplication, openURL: NSURL,
                     didFinishLaunchingWithOptions launchOptions:
        [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        if currentAuthorizationFlow!.resumeAuthorizationFlow(with: openURL as URL) {
            return true
        }
        return false
    }

因此,請不要忘記“導入AppAuth”部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM