![](/img/trans.png)
[英]Swift Bridging-Header Objective-C presentViewController
[英]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
樣式說明:類名不要使用小寫。 這使它們易於與變量混淆。 因此, VCListingList比vc_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.