[英]How do you pass data from Objective C to Swift?
如何將數據對象從Objective C文件傳遞到Swift文件?
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString: @"details"]){
//create the swift file and set the property I want to pass here
}
}
在迅速視圖中:
import Foundation
import UIKit
import CoreLocation
public class SwiftViewController: UIViewController{
var passedObject:NPSCustomObject!
public override func viewDidLoad() {
}
我更喜歡使用NotificationCenter:
目標C到斯威夫特
目標C.
NSDictionary *myData = @{@"data1" : @"value1", @"data2": @"value2"};
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotificationName" object:nil userInfo:myData];
迅速
NotificationCenter.default.addObserver(forName:NSNotification.Name(rawValue: "myNotificationName"), object:nil, queue:nil, using:yourFunction)
func yourFunction(notification:Notification) -> Void {
if let extractInfo = notification.userInfo {
print(" my data: \(extractInfo["data1"])");
}
}
我發現NSUserDefaults有一些'hack'保存數據:
Objective-C類:
NSString *myObjcData = @"from Objective-C";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:myObjcData forKey:@"data"];
[defaults synchronize];
Swift類:
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
override func viewDidLoad() {
super.viewDidLoad()
// Receive data ---> with NSUserdefaults
let mySwiftData: AnyObject? = prefs.valueForKey("data")
println("data is \(mySwiftData)")
}
它不是很優雅,但我保證它有效! 希望能幫助到你。
如果故事板中的“詳細信息”segue被設置為傳遞給SwiftViewController
類型的視圖控制器(它應該是您已經暗示過的工作流程),那么您不會創建后者的實例 - segue具有已經為你完成了。 您可以在prepareForSegue
作為segue.destinationViewController
訪問它。
假設你的項目已經設置了正確的標題,用於將Swift橋接到(Obj)C ,你只需要將segue.destinationViewController
轉換為你正在使用的類型,這樣你就可以訪問它的成員了。 例如:
if([[segue identifier] isEqualToString: @"details"]){
SwiftViewController *vc = (SwiftViewController *)segue.destinationViewController;
vc.passedObject = // put your instance of NPSCustomObject here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.