簡體   English   中英

在使用橋接頭時,如何將數據(字典)從Objective-C控制器傳遞到Swift“ viewcontroller”中? 還有其他辦法嗎?

[英]How to pass data(dictionary) from Objective-C Controller into Swift `viewcontroller` while using bridging-header? Is there any other way?

我想將字典從Objective-C控制器發送到Swift控制器。 我已經嘗試過在Swift控制器中使用關鍵字@obj-c ,Public,但是無法訪問。

Objective-C代碼:

    vc_listing_list *swiftController = [[vc_listing_list alloc] init];

    swiftController = (vc_listing_list *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];

在這里,我要訪問"selectedDirectory"變量以發送字典值。

SWIFT代碼:

@objc class vc_listing_list: UIViewController {

   var selectedDirectory: Dictionary<String, String>

}

我希望我的代碼在目標c控制器中:

vc_listing_list *swiftController = [[vc_listing_list alloc] init];

swiftController = (vc_listing_list *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
swiftController.selectedDirectory = someDictionary;  // this line am expecting.

@objcMembers添加到swift文件

@objcMembers class vc_listing_list: UIViewController {

var selectedDirectory: Dictionary

}

如果您正在使用情節提要,則不需要像這樣初始化

vc_listing_list *swiftController = [[vc_listing_list alloc] init];

你可以像這樣直接使用

  vc_listing_list * swiftController = [storyboard instantiateViewControllerWithIdentifier:@"viewControllerID"];
  swiftController.selectedDirectory = someDictionary
  [self.navigationController pushViewController:swiftController animated:YES];

也請嘗試更正您的類和對象命名約定。 謝謝

要從Swift訪問Objective-C類,您需要將其添加到橋接頭文件中。 橋接頭通常以您的目標名稱命名,例如MyApp-BridgingHeader.h

您可以在橋接頭中導入Swift所需的所有頭:

#import "VCListingList.h" 

從那里您可以從Swift中訪問該類。

let controller = VCListingList()

因此,對於您的問題,您需要在Header中將selectedDirectory公開為具有<NSString *,NSString *>橋接類型的屬性。

您可以選擇使用nullable將其設置為Optional 如果您不希望它是Optional ,則必須先初始化該屬性,然后才能在Swift中讀取它。

NS_ASSUME_NONNULL_BEGIN

@interface VCListingList: UIViewController 

@property (nonatomic, strong, nullable) NSDictionary<NSString *,NSString *>* selectedDictionary;

//the rest of your header stuff

@end

NS_ASSUME_NONNULL_END

樣式說明:類名不要使用小寫。 這使它們易於與變量混淆。 因此, VCListingListvc_listing_list可取

您可以閱讀文檔以獲取更多信息

有幾種方法可以將數據從目標c傳遞到swift類。

1)使用NSUserDefault

NSMutableDictionary *dic = [[NSMutableDictionary  alloc] init];

[dic addObject:@"sss" forKey:@"hi"];
[dic addObject:@"eee" forKey:@"hr"];
[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"];
[[NSUserDefaults standardDefaults] synchronize];

然后在快速課堂上獲取數據

let dic = NSUserDefaults.standard.string(forKey: "DicKey")

2)使用swift類的直接創建對象。

var dic : [[String:Any]]!

這樣傳遞字典

NSMutableDi

ctionary *dic = [[NSMutableDictionary  alloc] init];
[dic addObject:@"sss" forKey:@"hi"];
[dic addObject:@"eee" forKey:@"hr"];

SwiftViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"SwiftViewController"];
  SwiftViewController.dict = dict
  [self.navigationController pushViewController:vc animated:YES];

暫無
暫無

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

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