如何将数据从Objective C传递给Swift?

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)

Vic*_*tos 7

我更喜欢使用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)


ric*_*ter 5

如果在情节提要中将“详细信息” segue设置为传递给类型的视图控制器SwiftViewController(应该用于您暗示的工作流),则您无需创建后者的实例-该segue已经为您完成。你可以在里面访问它prepareForSeguesegue.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)

  • 不是桥接头。Swift代码使用它与Objective-C代码进行接口。这是另一回事,在他的Objective-C代码中需要“ #import“ ProductModuleName-Swift.h””(系统为他的Swift对象生成的标头)。 (3认同)

mat*_*tyU 5

我发现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)

它不是很优雅,但我保证它有效!希望能帮助到你.