在iOS中传值的方式有很多种方式,有最普遍的就是属性传值,代理传值,block传值等方式了。
写了OC和swift的两个版本的传值demo。
其中需要说明一下的是,这个通知传值。
在通知传值的时候,有的时候会出现如下的问题,也就是当通知中心发出了通知,接收通知的一方却没有收到任何消息。这可能是线程阻塞的原因,只需要将通知中心放在子线程中去处理。
// OC
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:self userInfo:@{@"text" : @"请输入账号名"}];
}];
// swift
OperationQueue.main.addOperation {
let cell = self.tableView.cellForRow(at: IndexPath(row: 4, section: 0))
let wjNotificationName = Notification.Name.init(rawValue: "notificationTest")
NotificationCenter.default.post(name: wjNotificationName, object: self, userInfo: ["text" : cell?.textLabel?.text ?? "没有值传入"])
}
单例传值:
在OC和swift中创建单例传值,一般都会创建一个单例类,通过这个单例类来中转,进行传值,也就是说这个单例类就像是个容器一样进行存储数据,也就是说正向反向传值都可以。
但是在OC中和swift中创建单例类还是有些不同:
// OC采用的是GCD或者是其他的方法进行创建
+ (wjSingleTon *)shareSingleTon {
static wjSingleTon *singleTon = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
singleTon = [[self alloc] init];
});
return singleTon;
}
// swift创建单例类
// MARK:- 单例类
final class wjSingleTon: NSObject {
static let sharedInstance = wjSingleTon()
var text : String!
override init() {}
}
其他的传值方式在oc和swift中没有多大的差别。