iOS之传值

275 阅读1分钟

在iOS中传值的方式有很多种方式,有最普遍的就是属性传值,代理传值,block传值等方式了。 写了OCswift的两个版本的传值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中没有多大的差别。