Nat*_*han 4 objective-c ios 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
}
}
Run Code Online (Sandbox Code Playgroud)
在迅速视图中:
import Foundation
import UIKit
import CoreLocation
public class SwiftViewController: UIViewController{
var passedObject:NPSCustomObject!
public override func viewDidLoad() {
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用NotificationCenter:
目标C到斯威夫特
目标C.
NSDictionary *myData = @{@"data1" : @"value1", @"data2": @"value2"};
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotificationName" object:nil userInfo:myData];
Run Code Online (Sandbox Code Playgroud)
迅速
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"])");
}
}
Run Code Online (Sandbox Code Playgroud)
如果在情节提要中将“详细信息” 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
}
Run Code Online (Sandbox Code Playgroud)
我发现NSUserDefaults有一些'hack'保存数据:
Objective-C类:
NSString *myObjcData = @"from Objective-C";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:myObjcData forKey:@"data"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
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)")
}
Run Code Online (Sandbox Code Playgroud)
它不是很优雅,但我保证它有效!希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
5003 次 |
| 最近记录: |