Observer

UITextField文本更改事件

末鹿安然 提交于 2020-07-27 23:05:48
问题: How can I detect any text changes in a textField? 如何检测textField中的任何文本更改? The delegate method shouldChangeCharactersInRange works for something, but it did not fulfill my need exactly. 委托方法 shouldChangeCharactersInRange 可以为某些事情工作,但它不能完全满足我的需要。 Since until it returns YES, the textField texts are not available to other observer methods. 因为直到返回YES,否则textField文本不可用于其他观察者方法。 eg in my code calculateAndUpdateTextFields did not get the updated text, the user has typed. 例如,在我的代码中,用户已键入, calculateAndUpdateTextFields 未获取更新的文本。 Is their any way to get something like textChanged Java event handler.

OC项目转Swift指南

情到浓时终转凉″ 提交于 2020-07-27 13:53:49
运行环境:Xcode 11.1 Swift5.0 最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些坑,于是有了这篇总结性的文档。 如果你也有将OC项目Swift化的需求,可以作为参考。 OC转Swift有一个大前提就是你要对Swift有一定的了解,熟悉Swift语法,最好是完整看过一遍官方的 Language Guide 。 转换的过程分自动化和手动转译,鉴于自动化工具的识别率不能让人满意,大部分情况都是需要手动转换的。 自动化工具 有一个比较好的自动化工具 Swiftify ,可以将OC文件甚至OC工程整个转成Swift,号称准确率能达到90%。我试用了一些免费版中的功能,但感觉效果并不理想,因为没有使用过付费版,所以也不好评价它就是不好。 Swiftify还有一个Xcode的插件 Swiftify for Xcode ,可以实现对选中代码和单文件的转化。这个插件还挺不错,对纯系统代码转化还算精确,但部分代码还存在一些识别问题,需要手动再修改。 手动Swift化 桥接文件 如果你是在项目中首次使用Swift代码,在添加Swift文件时,Xcode会提示你添加一个 .h 的桥接文件。如果不小心点了不添加还可以手动导入,就是自己手动生成一个 .h 文件,然后在 Build Settings > Swift Compiler -

最全Vue知识点(基础到进阶,覆盖vue3)

こ雲淡風輕ζ 提交于 2020-07-27 08:59:45
基础篇 说说你对MVVM的理解 Model-View-ViewModel的缩写,Model代表数据模型,View代表UI组件,ViewModel将Model和View关联起来 数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知 viewModel 层更新数据 了解mvc/mvp/mvvm的区别 Vue2.x响应式数据/双向绑定原理 Vue 数据双向绑定主要是指: 数据变化更新视图,视图变化更新数据 。其中,View变化更新Data,可以通过事件监听的方式来实现,所以 Vue数据双向绑定的工作主要是如何 根据Data变化更新View 。 简述 : 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。 这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。 每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。 深入理解: 监听器

搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式

本小妞迷上赌 提交于 2020-07-26 23:23:28
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel 的缩写,说都能直接说出来 model :模型, view :视图, view-Model :视图模型 V:视图,即浏览器最前端渲染的页面 M:模型,数据模型,就是后端页面渲染依赖的数据 VM:稍后再说,因为暂时还不知道怎么工作,什么场景,直接解释有点没用 那就先说说前端场景: 如果数据改变,想要前端页面做出相应的改变,有几种方法: 1.使用原生js var dom = document.getElementById('xxx') dom.value = xxx; // 直接修改值 dom.innerHtml = xxx; //改变开始 和 结束标签中的html 2.使用jquery $('#name').text('Homer').css('color', 'red'); 上面可以看出来,jquery确实在dom操作方面简化了很多,链式调用和更加人性化的api在没有mvvm模型出世之前,使用率极高 但是,也可以看出来,数据和页面视图之间存在断层,数据影响视图,甚至是视图中的节点改变数据,这都是极其频繁的页面操作,虽然一再简化这个面向过程的逻辑操作,但是还是避免不了手动修改的弊端。 有没有一种更好的方式,可以实现这种视图( view )和模型( model

RxJava2.0(转载)

无人久伴 提交于 2020-07-24 15:36:30
零、来源 来源: Carson_Ho-简书 一、基础知识 角色 作用 类比 被观察者(Observable) 产生事件 顾客 观察者(Observer) 接收事件,并给出响应动作 厨房 订阅(Subscribe) 连接 被观察者 & 观察者 服务员 事件(Event) 被观察者 & 观察者 沟通的载体 菜式 二、基础使用 1.导入连接 implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' 2.创建被观察者 //创建被观察者,产生事件 public Observable<Integer> createObservable() { Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } }); return observable; } 3

NSNotification,NSNotificationCenter的使用、iOS中五种对象间传值的方式

一世执手 提交于 2020-05-09 16:08:40
学习内容 NSNitification与NotificationCenter(通知与通知中心) 通知的使用 [[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector (noticeAction:) name:@"name" object:nil]; 注册观察者 NSNotification* notice = [NSNotification notificationWithName:@"name" object:nil userInfo:params]; [[NSNotificationCenter defaultCenter]postNotification:notice]; 创建一个通知并发送 观察者对象的注册一定要比通知的发送提前,否则的话会接收不到通知 通知和delegate的基本区别 通知是允许多对多的,而delegate只能是一对一的 通知的耦合度较低,发送方不需要知道通知方的任何情况,而delegate不行 通知的效率比起delegate略差 通知是同步还是异步的? postNotification:通知的发送总是会卡住当前线程,等待所有的observer对象执行(如果没有经过特殊处理,接收者对象的selector与postNotification在同一线程执行

vue.js中created方法作用

徘徊边缘 提交于 2020-05-08 21:15:03
这是它的一个生命周期 钩子函数 ,就是一个vue实例被生成后调用这个函数。一个vue实例被生成后还要绑定到某个 html元素 上,之后还要进行编译,然后再插入到document中。每一个阶段都会有一个 钩子函数 ,方便开发者在不同阶段处理不同逻辑。 一般可以在created函数中调用ajax获取页面 初始化 所需的数据。 实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。在这个过程中,实例也会调用一些 生命周期钩子 ,这就给我们提供了执行自定义逻辑的机会。例如, created 这个钩子在实例被创建之后被调用: var vm = new Vue({ data: { a: 1 }, created: function ( ) { // `this` 指向 vm 实例 console.log( 'a is: ' + this.a) } }) // -> "a is: 1" 也有一些其它的钩子,在实例生命周期的不同阶段调用,如 mounted 、 updated 、 destroyed 。钩子的 this 指向调用它的 Vue 实例。一些用户可能会问 Vue.js 是否有“控制器”的概念?答案是,没有。组件的自定义逻辑可以分布在这些钩子中。

前端性能优化之谈谈通用性能指标及上报策略

…衆ロ難τιáo~ 提交于 2020-05-08 19:20:05
背景 性能优化是所有前端人的追求,在这条路上,方法多种多样。这篇文章,说一下可以怎样定义性能指标及上报。 指标 FP 含义 FP,全称 First Paint ,翻译为 首次绘制 ,是时间线上的第一个 时间点 ,它代表网页的第一个像素渲染到屏幕上所用时间,也就是页面在屏幕上首次发生视觉变化的时间。 统计逻辑 通过performance.getEntriesByType('paint’),取第一个pain的时间。如: function getFPTime ( ) { const timings = performance.getEntriesByType( 'paint' )[ 0 ]; return timings ? Math .round(timings.startTime) : null } 复制代码 FCP 含义 FCP,全称 First Contentful Paint ,翻译为 首次内容绘制 ,顾名思义,它代表浏览器第一次向屏幕绘 内容 。 注意:只有首次绘制文本、图片(包含背景图)、非白色的canvas或SVG时才被算作FCP。 统计逻辑 通过performance.getEntriesByType('paint’),取第二个pain的时间,或者通过Mutation Observer观察到首次节点变动的时间。如: const domEntries = [] const

常用设计模式的实现,以及Netty中的设计模式

回眸只為那壹抹淺笑 提交于 2020-05-08 15:53:06
1.观察者模式    有两个角色,观察者和被观察者。当被观察者发出消息后,注册了的观察者会收到其消息,而没有注册的观察者就不会收到。 // 定义观察者接口 interface Observer{ // 通知观察者 void notify(String message); } // 定义被观察者 interface Observed{ // 注册观察者 void registerObserver(Observer o); // 移除观察者 void removeObserver(Observer o); // 通知观察者 void notifyObserver(); } // 实现一个被观察者(女神) class Gril implements Observed{ // 女神最近的消息 private String message; // 追求女神的人 List<Observer> observerList; public Gril(){ observerList = new ArrayList<> (); } @Override public void registerObserver(Observer o) { // 多了一位追求者 observerList.add(o); } @Override public void removeObserver(Observer o) {

给跪了,这个 ZooKeeper 源码分析写的太好了!

徘徊边缘 提交于 2020-05-08 14:11:41
  # 文末有 1 元解锁 98 元专栏的福利,记得领   一眨眼 2020 年小半年都过去了,一位某东的朋友都开始筹备 618 购物节了。    五一期间大家聚一起,还聊了聊分布式系统: 据说某东的 618 购物节,仅是网站支付系统的白条接口,每分钟的访问量都是上千万次,这相当于单体架构下上万台机器总和的处理能力。   支付作为购物的核心功能,要想在这样的高并发场景下实现“5 个 9”(99.999% )的可靠性,来保证支付成功率,使用单一架构显然是无法做到的。      而使用分布式架构系统则会大幅提高服务的处理能力,降低程序的开发维护成本以及部署的难度。   但很遗憾,分布式架构是很好,但很多开发人员遇到分布式问题都很头疼:   本身就职于传统的软件开发企业,没有分布式系统的学习与实践环境;   分布式知识非常零散,涉及网络、通信、并发、安全等诸多知识点,不知如何入手。   很多面试者对分布式只是知道,不懂深层次的原理和灵活使用;   只能在固定业务下做到熟练,更换场景和环境就没了思路;   这都是因为对分布式技术体系缺乏认知导致的。 如果你想进一步提高分布式架构能力,熟练掌握 ZooKeeper 绝对是掌握分布式系统的关键。      ZooKeeper 作为一个分布式应用协调框架,它更像机场的调度中心,协同不同程序或组件有序工作。 这种兼容、协调、有序让