pod安装 rxswift_ios pod rxswift 版本号跟不上 - CSDN
  • 之前建立的包如下 现在要新增一个  报错 解决方法:删掉Podfile.lock文件 参考博客:https://www.jianshu.com/p/1950da79b79b  

    之前建立的包如下

    现在要新增一个

     报错

    解决方法:删掉Podfile.lock文件

    参考博客:https://www.jianshu.com/p/1950da79b79b

     

    展开全文
  • 1、pod 引入所需的库 ... pod 'RxSwift' pod 'RxCocoa' pod 'HandyJSON', '5.0.0-beta' 升级xcode到10.2之后,swift编译版本为5.0。 在引入HandyJSON 的时候,默认是4.2.1版本,报错了:Undefined symb...

    1、pod 引入所需的库

    	pod 'Cartography'   # swift 布局
     	pod 'RxSwift'          
      	pod 'RxCocoa'		  
    	pod 'HandyJSON', '5.0.0-beta'
    

    升级xcode到10.2之后,swift编译版本为5.0。
    在引入HandyJSON 的时候,默认是4.2.1版本,报错了:Undefined symbols for architecture x86_64:
    “_swift_getFieldAt”。解决办法是使用5.0.0-beta版本就可以了。

    2、新建viewcontroller、viewmodel和model,代码如下:

    view controller: 里边新建一个tableview,然后和viewmodel的dataSourceObservable和tableview绑定。

    import UIKit
    import Cartography
    
    class MVVMViewController: UIViewController {
    
        let viewModel = MVVMViewModel() // view 层持有 viewModel
        let tableView = UITableView()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            self.navigationItem.title = "天行数据"
            view.addSubview(tableView)
            tableView.rowHeight = UITableView.automaticDimension
            tableView.estimatedRowHeight = 112
            tableView.register(MVVMTableViewCell.self, forCellReuseIdentifier: "cell")
            constrain(view, tableView) { (view, tableView) in
                tableView.edges == view.edges
            }
            
    
            viewModel.dataSourceObservable.bind(to: tableView.rx.items(cellIdentifier: "cell")) {
                (_ , dd, cell) in
                let cell = cell as! MVVMTableViewCell
                cell.configData(model: dd)
            }.disposed(by: viewModel.disposeBag)
    
        }
    }
    
    

    viewmodel init方法里用URLSession.shared.rx.json生成一个Observable 对象,数据使用 天行数据 的api 接口,并把json使用HandyJSON转换为模型。

    
    import UIKit
    import RxSwift
    import HandyJSON
    
    class MVVMViewModel {
        
        let dataSourceObservable :Observable<[MVVMModel]>
        
        let disposeBag = DisposeBag()
        
        init() {
            
            let urlStr = "https://api.tianapi.com/meinv/?key=20dd4620e06b0e108d3e081bb981f710&num=20"
            let url = URL(string: urlStr)
            let request = URLRequest(url: url!)
            
            dataSourceObservable = URLSession.shared.rx.json(request: request).map { (result) -> [MVVMModel] in
                if let data = result as? [String: Any],
                    let channels = data["newslist"] as? [[String: Any]] {
                    let tmparr = [MVVMModel].deserialize(from: channels)
                    return tmparr as! [MVVMModel]
                }else {
                    return []
                }
            }
            
        }
        
        
        
    }
    
    

    cell 使用Cartography 进行布局

    import UIKit
    import Cartography
    
    
    class MVVMTableViewCell: UITableViewCell {
        
        let img = UIImageView()
        let titleLabel = UILabel()
        let subtitleLabel = UILabel()
        let timeLabel = UILabel()
        
        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
            contentView.addSubview(img)
            contentView.addSubview(titleLabel)
            contentView.addSubview(subtitleLabel)
            contentView.addSubview(timeLabel)
            
            img.contentMode = UIView.ContentMode.scaleAspectFit
            
            constrain(contentView,img) { (contentView, img) in
                img.left == contentView.left + 16
                img.top == contentView.top + 16
                img.width == 80
                img.height == 80
                
            }
            
            constrain(contentView, titleLabel, img) { (contentView,titleLabel,img) in
                titleLabel.left == img.right + 8
                titleLabel.top == img.top
                titleLabel.width == UIScreen.main.bounds.size.width - 120
            }
            
            constrain(subtitleLabel, titleLabel) { (subtitleLabel,titleLabel) in
                subtitleLabel.left == titleLabel.left
                subtitleLabel.top == titleLabel.bottom + 8
                subtitleLabel.width == titleLabel.width
            }
            
            constrain(img,timeLabel,titleLabel,contentView) { (img,timeLabel,titleLabel,contentView) in
                timeLabel.left == titleLabel.left
                timeLabel.bottom == img.bottom
                timeLabel.width == titleLabel.width
                timeLabel.bottom == contentView.bottom - 16
            }
            
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override func awakeFromNib() {
            super.awakeFromNib()
            // Initialization code
        }
    
        override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
    
            // Configure the view for the selected state
        }
        
        func configData(model: MVVMModel) {
            img.setImageWith(URL(string: model.picUrl!), placeholder: nil)
            titleLabel.text = model.title
            timeLabel.text = model.ctime
            subtitleLabel.text = model.description
        }
    
    }
    
    

    model 比较简单

    import UIKit
    import HandyJSON
    
    class MVVMModel : HandyJSON {
        let title: String? = nil
        let ctime: String? = nil
        let picUrl: String? = nil
        let url: String? = nil
        let description: String? = nil;
        
        required init() {}
     
    }
    
    

    效果如图在这里插入图片描述

    源码地址:https://github.com/hxcshr/awesome_ios_test

    展开全文
  • 原文 纯粹的官方代码使用NotificationCenter真...修改 Podfile,通过pod引入RxSwift pod 'RxSwift' pod 'RxCocoa' 通过 RxSwift 注册监听器 import RxSwift import RxCocoa let notificationName = Notification....

    原文

    纯粹的官方代码使用NotificationCenter真的很难用,但是有了RxSwift,就变得方便了很多。

    修改 Podfile,通过pod引入RxSwift
      pod 'RxSwift'
      pod 'RxCocoa'
    通过 RxSwift 注册监听器
    import RxSwift
    import RxCocoa
    
    let notificationName = Notification.Name("UploadStatus")
    NotificationCenter.default.rx.notification(notificationName).subscribe(onNext: { notification in
        if(notification.object != nil){
            print("上传状态:\(notification.object!)")
        }
        if(notification.userInfo != nil){
            print("参数:\(notification.userInfo!)")
        }
    })
    发送通知
    let notificationName = Notification.Name("UploadStatus")
    NotificationCenter.default.post(name: notificationName, object: "上传失败")
    
    NotificationCenter.default.post(name: notificationName, object: nil, userInfo: ["param1":"Wiki","param2":18])

    转载于:https://www.cnblogs.com/taoweiji/p/10915527.html

    展开全文
  • 一个swift中使用rxswift与rxcocoa的使用案例,初学者使用。
  • 最近在学习Raywenderlich的RxSwift视频教程,当我在Playground中使用RxSwift时,出现错误: Playground execution failed: error: Couldn’t lookup symbols: __T07RxSwift14ObservableTypePAAE2ofAA0C0Cy1...

    最近在学习Raywenderlich的RxSwift视频教程,当我在Playground中使用RxSwift时,出现错误:

    Playground execution failed:

    error: Couldn’t lookup symbols:
    __T07RxSwift14ObservableTypePAAE2ofAA0C0Cy1EQzGSayAHGd_AA018ImmediateSchedulerD0_p9schedulertFZ
    __T07RxSwift10ObservableCMa
    _T07RxSwift14ObservableTypePAAE4fromAA0C0Cy1EQzGSayAHG_AA018ImmediateSchedulerD0_p9schedulertFZfA0
    __T07RxSwift14ObservableTypePAAE4justAA0C0Cy1EQzGAHFZ
    __T07RxSwift10ObservableCyxGAA0C4TypeAAlWa
    _T07RxSwift14ObservableTypePAAE2ofAA0C0Cy1EQzGSayAHGd_AA018ImmediateSchedulerD0_p9schedulertFZfA0
    __T07RxSwift14ObservableTypePAAE4fromAA0C0Cy1EQzGSayAHG_AA018ImmediateSchedulerD0_p9schedulertFZ

    最终我通过修改Podefile解决了此问题:

    platform :ios, ‘11.0’

    target ‘RxSwiftPlayground’ do use_frameworks!
    # Pods for RxSwiftPlayground pod ‘RxSwift’, ‘~> 4.0’ end

    post_install do |installer|

    installer.pods_project.build_configurations.each do |config|
        config.build_settings.delete('CODE_SIGNING_ALLOWED')
        config.build_settings.delete('CODE_SIGNING_REQUIRED')
    end
    
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
        end
    end 
    end
    

    重新pod install,playground就正常了。

    参考 https://forums.raywenderlich.com/t/playground-does-not-execute-on-first-chapter/41341/27 .

    展开全文
  • cd 工程根目录(文件夹) vi Podfile 编辑(没有的话新建) i 输入三方,类似 pod ‘SMSSDK’ shift+esc+; wq 退出编辑 pod install
    1. cd 工程根目录(文件夹)
    2. vi Podfile 编辑(没有的话新建)
    3. i 输入三方,类似 pod ‘SMSSDK’
    4. shift+esc+;
    5. wq 退出编辑
    6. pod install

    例子:

    platform:ios,'8.0'
    target 'MyChat' do
    
    pod 'NIMSDK'
    
    end
    展开全文
  • RxSwift学习心得

    2017-08-30 16:17:43
    最近接触了RxSwift,有一些心得自己学习体会,有不对的地方还望各路大神多多指教,不喜勿喷,没有官方文档那么正式,根据自己的理解来的RxSwift ObserVerable 获得Observable combineLatest 简单使用 binTO 简单使用...
  • 在Android开发上,RxJava已经是非常重要的组成之一。最近在用Swift开发iOS应用,考虑在架构设计上使用RxSwift。 添加依赖 ... pod 'RxSwift', '~> 5' pod 'RxCocoa', '~> 5' pod 'RxBlo...
  • 我们开始安装RxSwift pod 'RxSwift' pod 'RxCocoa' pod update --verbose --no-repo-update (时间不多的话,用这条) 然后command + B 编译一下   首先我们新建一个页面,最简单的那种文件名在下面 ...
  • RxSwift安装: CocoPod导入: pod 'RxSwift' pod 'RxCocoa' 一.函数式编程 函数式编程是种编程范式,它需要我们将函数作为参数传递,或者作为返回值返还。我们可以通过组合不同的函数来得到想要的结果。 ...
  • 项目Demo地址 打造swift网络框架 准备工作 使用CocoaPods工具Pod需要... pod 'Moya/RxSwift' pod 'HandyJSON', '~> 5.0.0-beta.1' 创建文件 APIManager // // APIManager.swift // SwiftNetWorkHelper
  • 在一次偶然的机会下接触到了函数响应式编程这个东西(本篇文章不打算对这个进行表述),网上关于RxSwift 的教程很多,当然你也可从[github获取源代码](https://github.com/ReactiveX/RxSwift),利用playground进行...
  • pod 'Alamofire' pod 'SwiftyJSON' pod 'HandyJSON', '~>4.0.0-beta.1' ... pod 'Kingfisher' ... pod 'IBAnimatable' ... pod 'SwiftTheme' ... pod 'RxSwift' pod 'RxCocoa' pod 'SQLite...
  • RxSwift 的讲解 命令式编程 “传统的UIKit编程就是命令式编程”,使用函数或闭包用来改变程序中响应的“状态”,例如对UI的操作,使用UI组件的实例对象的方法,改变组件的属性,在系统的事件循环下,UI随着属性的...
  • RxSwift - Test operators

    2017-06-09 09:50:17
    所以使用需要单独倒入,可以使用pod进行安装。 RxTest提供了许多有用的功能用于测试RxSwift的代码。比如:TestScheduler,它是一个虚拟的时间调度者(virtual time scheduler),能够让我们很好的控制线性时间操作符...
  • RxSwift-内存管理

    2019-08-12 20:56:08
    在iOS中采用的引用计数来管理...在RxSwift中也仿造了系统引用计数实现了自己的一套引用计数功能。 init() { #if TRACE_RESOURCES _ = Resources.incrementTotal() #endif } deinit { #if TRACE_RESOUR...
  • rxswift_RxSwift

    2020-07-20 22:15:19
    rxswiftIn this tutorial, we’ll be discussing the basics of RxSwift in our XCode Project. Before we get into the nitty-gritty details, lets setup RxSwift. 在本教程中,我们将在XCode项目中讨论RxSwift的...
  • 在经历两个月漫长的学习时间之后,对ReactiveCocoa和RXSwift等函数响应式编程框架的学习已经有了一个非常清晰的概念。不过面对那么多的API和速记方法,脑袋实在记不住太多好用的小技巧。特在此整理了速查表。方便...
  • 在iOS开发中我们经常需要实现收起键盘操作,一般是... 在代理方法中实现: override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { textFiled.resignFirstResponder() //方法一 se...
  • RxSwift (9) 调试符号

    2017-03-13 15:49:54
    debugRxSwift的调试func rx_skipUntil(){ let disposeBag = DisposeBag() let sourceSequence = PublishSubject() let referenceSequence = PublishSubject() sourceSeque
1 2 3 4 5 ... 17
收藏数 337
精华内容 134
关键字:

pod安装 rxswift