摘要:Homebrew、gem、npm、yarn、bundle Homebrew - macOS 系统中管理软件与环境的命令行工具 打开终端执行 Homebrew 的指令,便可以轻松安装 Python,Node.js,Java,MySQL 等执行环境,安装 Chrome,WeChat 等海量的应用程序,接
阅读全文
摘要:fastlane安装使用说明 环境检测 因为fastlane是ruby书写的,所以需要检测当前ruby的版本, 需要保证ruby的版本在2.0以上,在终端输入以下命令: $: ruby -v (# or `ruby --version`) 如果ruby低于2.0.需要进行以下步骤: $:rvm re
阅读全文
摘要:ssh生成流程 打开本地终端,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回车(-C 参数是你的邮箱地址) 回车然后会出现:Enter file in which to save the key (/Users/idid/.ssh
阅读全文
摘要:1. Layer在将Point,Rect改变参考系的方法 图层的point,Rect可以以不同参考系进行坐标转换 图层在图层树当中 也是相对于福涂层按层级关系放置的,一个图层的Position依赖于它父视图的bounds, 如果父图层发生了移动,它的所有子图层也会跟着移动。 移动根图层会将它的子图层
阅读全文
摘要:vim 退出命令(保存、放弃保存) 在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。 在末行模式下,输入命令 :w Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使
阅读全文
摘要:Bundler - gems管理器,类比cocopods 简介 Ruby Project依赖于一系列的ruby gems.而bundler是一个很好的管理ruby项目gems的工具。当然也是一个ruby gem. 使用bundler可以为你的ruby project提供统一的构建环境(无论是prod
阅读全文
摘要:RubyGems是Ruby的一个包管理器,提供了分发Ruby程序和库的标准格式“gem”,旨在方便地管理gem安装的工具,以及用于分发gem的服务器。这类似于Python的pip。RubyGems大约创建于2003年11月,从Ruby 1.9版起成为Ruby标准库的一部分。 gem用法 RubyGe
阅读全文
摘要:苹果开发者账号证书、授权配置文件设置流程 登录苹果开发者中心 点击Certificates, Identifiers & Profiles,为项目创建Bundle ID 、发布证书、以及权限文件(Profiles) 添加App ID App ID Description 的name 可以随意填(根据
阅读全文
摘要:uniapp iOS打包流程视频 uniapp_iOS打包流程.tvs RN iOS打包流程视频 RN_iOS打包流程教程.tvs
阅读全文
摘要:RN iOS打包流程 项目iOS目录下新建bundle文件夹 终端执行命令 react-native bundle --entry-file index.js --bundle-output ./ios/bundle/index.ios.jsbundle --platform ios --asset
阅读全文
摘要:uni-app iOS离线打包流程 DCloud上下载最新的5+SDK 解压SDK 选择HBuilder-Hello,里面是一个XCode工程,直接双击HBuilder-Hello.xcodeproj打开项目 目录结构 HBuilderX中,选择菜单中的“发行-原生App-本地打包-生成本地打包Ap
阅读全文
摘要:开始写NJS 使用NJS调用Native API非常简单,基本步骤如下: 1.导入要使用到的类; 2.创建类的实例对象(或者调用类的静态方法创建); 3.调用实例对象的方法; 以下例子使用NJS调用iOS和Android的原生弹出提示框(类似但不同于js的alert)。 iOS 以下代码在iOS平台
阅读全文
摘要:5+ App开发Native.js入门指南 Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。 如果说Node.js把js扩展到服务器世界,那么Native.js则把js扩展到手机App的原生世界。 HTML/JS/Css全部语法只有
阅读全文
摘要:uni-app vue-cli命令行 除了HBuilderX可视化界面,也可以使用 cli 脚手架,可以通过 vue-cli 创建 uni-app 项目。 环境安装 全局安装vue-cli npm install -g @vue/cli 创建uni-app 使用正式版(对应HBuilderX最新正式
阅读全文
摘要:本地uni-app原生插件提交云端打包 从HBuilderX1.9.0开始uni-app原生插件可以直接在插件市场绑定应用后,直接云端打包生效,避免下载uni-app原生插件到本地后再提交云端打包。 同时也继续支持将插件下载到本地后再提交云端打包,通常在以下情况使用这种方式: uni-app原生插件
阅读全文
摘要:编写package.json文件 iOS 插件包 至少需要包含:package.json文件 和 ios文件夹(名称必须是小写的ios)里面包含 .a (.a库必须是lib开头命名,比如libWeexDCRichAlert.a)或framework。 生成.zip包 将DCloud-RichAler
阅读全文
摘要:生成插件包 此步骤应该在您插件所有接口封装完毕,并在调试工程中测试完成后,再进行以下操作,说明中均以示例插件libWeexDCRichAlert为例进行的操作。在实际操作时,需将所有出现的libWeexDCRichAlert替换成您自己的插件名字,而且在插件开发过程中给文件命名或类命名时提倡增加前缀
阅读全文
摘要:无障碍角色 accessibilityRole (iOS, Android) none 无特性元素。 button 具有按钮特性。 link 具有链接特性。 search 用作搜索框的文本框。 image 具有图片特性。可以和按钮或链接等连用。 keyboardkey 元素作为虚拟键盘的一个键使用。
阅读全文
摘要:RN - 动画 流畅、有意义的动画对于移动应用用户体验来说是非常重要的。现实生活中的物体在开始移动和停下来的时候都具有一定的惯性,我们在界面中也可以使用动画来实现契合物理规律的交互。 React Native 提供了两个互补的动画系统:用于创建精细的交互控制的动画Animated和用于全局的布局动画
阅读全文
摘要:.framework与.a的区别 背景 在我们的日常开发中,经常会用到各种已经封装好的库,比如支付宝、高德地图SDK中的库,这些库可以给我们的开发带来很大的便利。有的时候,由于工作的需要,我们需要对自己的项目进行封装,生成库,方便别人的使用。今天,我们先了解下关于库的一些基本知识,也是很容易混淆的知
阅读全文
摘要:iOS制作Framework库 创建Framework库工程 添加功能文件 设置相关项TARGETS —> Build Settings Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真
阅读全文
摘要:iOS制作.a库 创建静态库工程Static Library 在.h和.m中分别定义需要的功能代码 分别在真机和模拟器状态下按(command + B)编译生成.a文件 真机 模拟器 右键点击“项目” - "Products"文件夹中生成的libWeexDCIOSRichAlert.a文件,"Sho
阅读全文
摘要:iOS uni-app原生插件开发 开发准备 OS X 10.14.0+ Xcode 11.0+ weex扩展API for iOS Native 对外接口 注册 SDK 默认的 Module、Handler 和 Component 注册自定义 module、Handler 和 Component
阅读全文
摘要:基础组件 交互控件 列表视图 iOS 独有的组件和 API Android 独有的组件和 API 其他 快速刷新 快速刷新是 React Native 一个特性,在修改组件的时候快速刷新会给你一个即时的反馈。快速刷新默认是开启的,可以通过调整 React Native 开发者菜单里面的 "Enabl
阅读全文
摘要:RN 初始化项目 react-native init SampleApp 这个命令会初始化一个工程、下载 React Native 的所有源代码和依赖包,最后在SampleAppMovies/iOS/SampleAppMovies.xcodeproj和SampleAppMovies/android/
阅读全文
摘要:State(状态) 使用两种数据来控制一个组件:props和state。props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。对于需要改变的数据,我们需要使用state。 一般来说,你需要在class中声明一个state对象,然后在需要修改时调用setState方法。 实际
阅读全文
摘要:Props属性 - Props is short for “properties.” {pic}外围有一层括号,我们需要用括号来把pic这个变量嵌入到 JSX 语句中。括号的意思是括号内部为一个 js 变量或表达式,需要执行后取值。因此我们可以把任意合法的 JavaScript 表达式通过括号嵌入到
阅读全文
摘要:RN开发环境 依赖 必须安装的依赖有:Node、Watchman、Xcode和CocoaPods。 Node, Watchman Watchman则是由 Facebook 提供的监视文件系统变更的工具。安装此工具可以提高开发时的性能(packager 可以快速捕捉文件的变化从而实现实时刷新)。 推荐
阅读全文
摘要:Flutte VS RN Flutter Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。 Flutter 是由
阅读全文
摘要:uni-app iOS离线打包 DCloud上下载最新的5+SDK 解压SDK 选择HBuilder-Hello,里面是一个XCode工程,直接双击HBuilder-Hello.xcodeproj打开项目 目录结构 HBuilderX中,选择菜单中的“发行-原生App-本地打包-生成本地打包App资
阅读全文
摘要:特性(Attributes) 在 Swift 中有两种特性,分别用于修饰声明和类型。特性提供了有关声明和类型的更多信息。例如,使用 discardableResult 特性声明的函数,表明该函数虽然有返回值,但如果没有使用该返回值,编译器不会产生警告。 您可以通过以下方式指定一个特性,通过符号 @
阅读全文
摘要:Error Handling 一旦序列里面产出了一个 error 事件,整个序列将被终止。RxSwift 主要有两种错误处理机制: retry - 重试 catch - 恢复 retry - 重试 retry 可以让序列在发生错误后重试: // 请求 JSON 失败时,立即重试, // 重试 3 次
阅读全文
摘要:自动引用计数 自动引用计数的工作机制 当你每次创建一个类的新的实例的时候,ARC 会分配一块内存来储存该实例信息。内存中会包含实例的类型信息,以及这个实例所有相关的存储型属性的值。 此外,当实例不再被使用时,ARC 释放实例所占用的内存,并让释放的内存能挪作他用。这确保了不再被使用的实例,不会一直占
阅读全文
摘要:继承 一个类可以继承另一个类的方法,属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。 在 Swift 中,类可以调用和访问超类的方法、属性和下标,并且可以重写这些方法,属性和下标来优化或修改它们的行为。Swi
阅读全文
摘要:闭包 闭包是可以在你的代码中被传递和引用的功能性独立代码块。 闭包能够捕获和存储定义在其上下文中的任何常量和变量的引用,这也就是所谓的闭 合并包裹那些常量和变量,因此被称为“闭包”,Swift 能够为你处理所有关于捕获 的内存管理的操作。 闭包表达式语法 闭包表达式语法能够使用常量形式参数、变量形式
阅读全文
摘要:方法 方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。 结构体和枚举能够定义方法是 S
阅读全文
摘要:下标 下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。举例来说,用下标访问一个 Array 实例中的元素可以写作 someArray[index],访问 Dictionary 实例中的元素可以写作 someDi
阅读全文
摘要:集合类 数组 初始化 创建空数组的时候必须携带类型信息 如果内容已经提供了类型信息,比如说作为函数的实际参数或者已经分类了的变量或常 量,你可以通过空数组字面量来创建一个空数组 使用初始化器有两种方式 类型 , Array<类型>() 数组遍历 For-In forEach方法 无法使用 break
阅读全文
摘要:赋值和算术运算符 基本概念 一元运算符对一个目标进行操作。一元前缀运算符(如 !b),一元后缀运算符(b!)。 二元运算符对两个目标进行操作(比如 a + b )同时因为它们出现在两个目标之间,所以是中 缀。 三元运算符操作三个目标。Swift 语言也仅有一个三元运算符,三元条件运算符( a ? b
阅读全文
摘要:iOS入门概述 Swift VS Objective-C 编程范式 Swift 可以面向协议编程、函数式编程、面向对象编程。 Objective-C 以面向对象编程为主,当然也可以引入类似ReactiveCocoa的类库 来进行函数式编程。 类型安全 Swift 是一门类型安全的语言。鼓励程序员在代
阅读全文
摘要:属性 属性将值与特定的类、结构体或枚举关联。存储属性会将常量和变量存储为实例的一部分,而计算属性则是直接计算(而不是存储)值。计算属性可以用于类、结构体和枚举,而存储属性只能用于类和结构体。 存储属性和计算属性通常与特定类型的实例关联。但是,属性也可以直接与类型本身关联,这种属性称为类型属性。 另外
阅读全文
摘要:协议 协议 定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体或枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。 除了遵循协议的类型必须实现的要求外,还可以对协议进行扩展,通过扩展来实现一
阅读全文
摘要:可选链式调用 可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是 nil,那么调用将返回 nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为 nil,整个调用链都会失败,即返回 nil。 注意 S
阅读全文
摘要:枚举 枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。 如果你熟悉 C 语言,你会知道在 C 语言中,枚举会为一组整型值分配相关联的名称。Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值。如果给枚举成员提供一个值(称为原始值),则该值的类型可以是
阅读全文
摘要:访问控制 访问控制可以限定其它源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以为其他人可以访问和使用的代码提供接口。 你可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、方法、构造器、下标等设置访问级别。协议也可以被限定在一定的
阅读全文
摘要:Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript
阅读全文
摘要:SCF CLI SCF CLI 是腾讯云云函数(Serverless Cloud Function,SCF)产品的命令行工具。通过 scf 命令行工具,您可以方便的实现函数打包、部署、本地调试,也可以方便的生成云函数的项目并基于 demo 项目进一步的开发。 scf cli 通过一个函数模板配置文件
阅读全文
摘要:ForEach可能存在的安全隐患 由于0..<区间运算符包含0,所以当目标数组为空时,会引起数组越界 ForEach(0..< self.productModels.count) {} 优化 定义数据实体唯一id,直接遍历目标数组 ForEach(self.productModels) { prod
阅读全文
摘要:SwiftUI - MVVM之ViewModel 什么是ViewModal ViewModal是View和数据的中间层。ViewModel是视图和数据之间的一层。 ViewModel通常使用service objects来获取数据,对其进行格式化后向View提供格式化的数据。 苹果什么时候开始推动M
阅读全文
摘要:Xcode 11.4 发布新特性 Xcode 11.4 包含适用于 iOS 13.4,iPadOS 13.4,tvOS 13.4,watchOS 6.2 和 macOS Catalina 10.15.4 的SDK。Xcode 11.4 版本支持在 iOS 8+,tvOS 9+ 以及 watchOS
阅读全文
摘要:添加模板函数 编辑触发方式 访问路径信息 运行日志
阅读全文
摘要:什么是serverless无服务? serverless中文的含义是 "无服务器",但是它真正的含义是开发者再也不用过多考虑服务器的问题,但是并不代表完全去除服务器,而是我们依靠第三方资源服务器后端,比如使用 Amazon Web Services(AWS) Lambda. 计算服务来执行代码,那么
阅读全文
摘要:iOS中的投屏方案: 1, ReplayKit 录屏直播ReplayKit Live与广播UI /上传扩展 iOS9中引入了ReplayKit, 让开发者有了一定的获取屏幕数据的能力. 并在iOS10和iOS11中继续扩展了ReplayKit的能力. 但还是有很大的限制, 比如在使用ReplayKi
阅读全文
摘要:类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。 类型转换在 Swift 中使用 is 和 as 操作符实现。这两个操作符分别提供了一种简单达意的方式去检查值的类型或者转换它的类型。 为类型转换定义类层次 你可以将类型转换用在类和子类的层次结构上,检查特定类实例的类型并
阅读全文
摘要:错误处理 错误处理(Error handling) 是响应错误以及从错误中恢复的过程。Swift 在运行时提供了抛出、捕获、传递和操作可恢复错误(recoverable errors)的一等支持(first-class support)。 某些操作无法保证总是执行完所有代码或生成有用的结果。可选类型
阅读全文
摘要:Combine详解 Combine框架提供了一个声明性的Swift API,用于随时间处理值。这些值可以表示多种异步事件。 Combine合声明publishers以公开可随时间变化的值,以及subscribers从publishers接收这些值。 Publisher协议声明了一种可以随时间传递一系
阅读全文
摘要:总结笔记 在 UIKit 开发时,我们经常会接触一些像是 viewDidLoad,viewWillAppear 这样的生命周期的方法,并在里面进行一些配置。SwiftUI 里也有一部分这类生命周期的方法,比如 .onAppear 和 .onDisappear,它们也被“统一”在了 modifier
阅读全文
摘要:SwiftUI 和 Combine 编程 SwiftUI 响应式编程。 基于 UIKit、Core Graphics、Core Text 等系统框架封装了完整而优美的 DSL。 Combine 响应式编程框架和函数式编程思想直接驱动了 SwiftUI 中的数据流向。 提供了一套通用的语法和基础数据类
阅读全文
摘要:Swift Combine map/mapError map 将收到的值按照给定的 closure 转换为其他值,mapError 则将错误转换为另外一种错误类型。 func map<T>(_ transform: (Output) -> T) -> Publishers.Just<T> repla
阅读全文
摘要:回撤目标版本 git reset --hard 目标版本号 版本反做 git revert -n 版本号 想撤销之前的某一版本,保留该目标版本后面的版本,记录下这整个版本变动流程 本地覆盖记录 git commit --amend -m "Add an author/email comment" 线
阅读全文
摘要:数据流管理 SwiftUI 是一个典型的单向数据流得声明式 UI 编程框架, 在 SwiftUI 中 View 只是一个页面的描述部分,SwiftUI 提供了多个数据流管理对象。@State @Binding @Obserabled ,通过改变这些数据流的值,SwiftUI 系统可以理解重新构建 V
阅读全文
摘要:SwiftUI 的 DSL 语法分析 SwiftUI 的 View 是对于 UI 应该是如何展示的一个数据描述,并非真正用于显示的 View。现在的 iOS,底层会用 UIKit 实现,最终从数据描述的 View 生成真正的 UIView。每个 View 的内容,就是其 body 属性。返回值为 s
阅读全文
摘要:GraphQL安全指北,对GraphQL的相关知识做了相关摡叙,描述了GraphQL权限认证的一些实践方案。 https://graphql.org https://blog.csdn.net/aigoV/article/details/94600968 https://www.bilibili.c
阅读全文
摘要:Combine 为我们提供了一些便捷的 Publisher 的实现 just let justPubliser = Publishers.Just("Hello") justPubliser 会给每个订阅者发送一个 "Hello" 消息,然后立即结束(这个数据流只包含一个值)。 Empty Empt
阅读全文
摘要:AnyPublisher、AnySubscriber、AnySubject 通用类型,任意的 Publisher、Subscriber、Subject 都可以通过 eraseToAnyPublisher()、eraseToAnySubscriber()、eraceToAnySubject() 转化为
阅读全文
摘要:Combine 内置的 Subscriber 有三种: Sink Assign Subject Sink 是非常通用的 Subscriber,我们可以自由的处理数据流的状态。 let once: Publishers.Once<Int, Never> = Publishers.Once(100) l
阅读全文
摘要:简介 Combine是Apple在2019年WWDC上推出的一个新框架。该框架提供了一个声明性的Swift API,用于随时间处理值。这些值可以表示多种异步事件。 Publisher协议声明了一种可以随时间传递一系列值的类型。Operators根据从upstream publishers接受到的值采
阅读全文
摘要:键值观察KVO的使用 1,KVO 介绍 KVO(键值观察)是一种 Objective-C 的回调机制,全称为:key-value-observing。 该机制简单来说就是在某个对象注册监听者后,当被监听的对象发生改变时,对象会发送一个通知给监听者,以便监听者执行回调操作。 2,RxSwift 中的
阅读全文
摘要:RxSwift 5 更新了什么? RxRelay 现在是一个独立的框架 RxRelay 是一个在 Subjects 之上很好的抽象层。它可以让我们发出元素,而不用担心 error 和 completed 这样的终止事件。由于它们被添加到 RxSwift 中,并且是 RxCocoa 项目的一部分。 许
阅读全文
摘要:timeout 如果源 Observable 在规定时间内没有发出任何元素,就产生一个超时的 error 事件 如果 Observable 在一段时间内没有产生元素,timeout 操作符将使它发出一个 error 事件。 timer 创建一个 Observable 在一段延时后,产生唯一的一个元素
阅读全文
摘要:take 仅仅从 Observable 中发出头 n 个元素 通过 take 操作符你可以只发出头 n 个元素。并且忽略掉后面的元素,直接结束序列。 let disposeBag = DisposeBag() Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "
阅读全文
摘要:sample 不定期的对 Observable 取样 sample 操作符将不定期的对源 Observable 进行取样操作。通过第二个 Observable 来控制取样时机。一旦第二个 Observable 发出一个元素,就从源 Observable 中取出最后产生的元素。 scan 持续的将 O
阅读全文
摘要:调度器(Schedulers) 调度器(Schedulers)是 RxSwift 实现多线程的核心模块,它主要用于控制任务在哪个线程或队列运行。 RxSwift 内置了如下几种 Scheduler: CurrentThreadScheduler:表示当前线程 Scheduler。(默认使用这个) M
阅读全文
摘要:from 将其他类型或者数据结构转换为 Observable 当你在使用 Observable 时,如果能够直接将其他类型转换为 Observable,这将是非常省事的。from 操作符就提供了这种功能。 将一个数组转换为 Observable: let numbers = Observable.f
阅读全文
摘要:deferred 直到订阅发生,才创建 Observable,并且为每位订阅者创建全新的 Observable deferred 操作符将等待观察者订阅它,才创建一个 Observable,它会通过一个构建函数为每一位订阅者创建新的 Observable。看上去每位订阅者都是对同一个 Observa
阅读全文
摘要:concatMap 将 Observable 的元素转换成其他的 Observable,然后将这些 Observables 串连起来 concatMap 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。然后让这些 Observables 按顺序的
阅读全文
摘要:操作符详解 amb 在多个源 Observables 中, 取第一个发出元素或产生事件的 Observable,然后只发出它的元素 当传入多个 Observables 到 amb 操作符时,它将取其中一个 Observable:第一个产生事件的那个 Observable,可以是一个 next,err
阅读全文
摘要:GraphiQL中API文件与schema.json文件过大,属于动态生成文件,配置忽略项, 更进一步了解了git忽略的设置规则 .gitignore 文件中,每一行的忽略规则的语法如下: 空格不匹配任意文件,可作为分隔符,可用反斜杠转义 开头的文件标识注释,可以使用反斜杠进行转义 ! 开头的模式标
阅读全文
摘要:如何选择操作符? 决策树可以帮助找到需要的操作符。 决策树 创建一个 Observable 产生特定的一个元素:just 经过一段延时:timer 从一个序列拉取元素:from 重复的产生某一个元素:repeatElement 存在自定义逻辑:create 每次订阅时产生:deferred 每隔一段
阅读全文
摘要:Error Handling - 错误处理 一旦序列里面产出了一个 error 事件,整个序列将被终止。RxSwift 主要有两种错误处理机制: retry - 重试 catch - 恢复 retry - 重试 retry 可以让序列在发生错误后重试: // 请求 JSON 失败时,立即重试, //
阅读全文
摘要:Operator - 操作符 操作符可以帮助创建新的序列,或者变化组合原有的序列,从而生成一个新的序列。 例如,通过 map 方法将输入的用户名,转换为用户名是否有效。然后用这个转化后来的序列来控制红色提示语是否隐藏。我们还通过 combineLatest 方法,将用户名是否有效和密码是否有效合并成
阅读全文
摘要:ReplaySubject ReplaySubject 将对观察者发送全部的元素,无论观察者是何时进行订阅的。 这里存在多个版本的 ReplaySubject,有的只会将最新的 n 个元素发送给观察者,有的只会将限制时间段内最新的元素发送给观察者。 如果把 ReplaySubject 当作观察者来使
阅读全文
摘要:Observable & Observer 既是可监听序列也是观察者 有一部分非常特别的序列。它们既是可监听序列也是观察者 textField的当前文本。它可以看成是由用户输入,而产生的一个文本序列。也可以是由外部文本序列,来控制当前显示内容的观察者: // 作为可监听序列 let observab
阅读全文
摘要:ControlEvent ControlEvent 专门用于描述 UI 控件所产生的事件,它具有以下特征: 不会产生 error 事件 一定在 MainScheduler 订阅(主线程订阅) 一定在 MainScheduler 监听(主线程监听) 共享附加作用 Observer - 观察者 观察者
阅读全文
摘要:Driver Driver 是一个精心准备的特征序列 它主要是为了简化 UI 层的代码。不过如果遇到的序列具有以下特征,也可以使用它: 不会产生 error 事件 一定在 MainScheduler 监听(主线程监听) 共享附加作用 这些都是驱动 UI 的序列所具有的特征。 为什么要使用 Drive
阅读全文
摘要:Completable Completable 是 Observable 的特殊版本 不像 Observable 可以发出多个元素,它要么只能产生一个 completed 事件,要么产生一个 error 事件。 发出零个元素 发出一个 completed 事件或者一个 error 事件 不会共享附加
阅读全文
摘要:共享 附加作用 共享 附加作用: Driver Signal ControlEvent ... 不共享 附加作用: Single Completable Maybe ... 什么是共享 附加作用,什么是不共享 附加作用? 共享 附加作用: ... let observable: Observable
阅读全文
摘要:RxSwift 核心 Observable - 产生事件(可监听序列) Observer - 响应事件(观察者) Operator - 创建变化组合事件 (操作符) Disposable - 管理绑定(订阅)的生命周期 Schedulers - 线程队列调配(调度器) // Observable<S
阅读全文
摘要:函数响应式编程 函数响应式编程是种编程范式。它是通过构建函数操作数据序列,然后对这些序列做出响应的编程方式。它结合了函数式编程以及响应式编程 函数式编程是种编程范式,它需要我们将函数作为参数传递,或者作为返回值返还。我们可以通过组合不同的函数来得到想要的结果。 函数试编程的优点 灵活 高复用 简洁
阅读全文
摘要:ReactiveX(简写: Rx) 是一个可以帮助我们简化异步编程的框架。 RxSwift 是 Rx 的 Swift 版本。 将KVO,异步操作 和 流 全部被统一成抽象序列 什么要使用 RxSwift ? 复合 - Rx 就是复合的代名词 复用 - 因为它易复合 清晰 - 因为声明都是不可变更的
阅读全文
摘要:Swift 5.1 新语法 单表达式隐式返回值 在 Swift 5.0 之前的语法中,如果一个闭包表达式只有一个表达式,那么可以省略 return 关键字。 现在 Swift 5.1 以后的版本中计算属性和函数语句同样适用。 // before swift 5.0 struct Rectangle
阅读全文
摘要:MVVM Model Model 是用来表示我们会对其进行处理的实际数据,而且其中不应该包含逻辑。 View View 是直接与用户交互的,也不应该包含逻辑,只需要告诉它如何显示,并且在触发事件之后进行转发。 ViewModel ViewModel 会跟踪 View 的事件,和Model 层传给它的
阅读全文
摘要:swift标准库中常见的55个协议。 从协议名结尾字面上我们可以将Protocol分为able、Type、Convertible 三类 从功能角度上来讲的话可以总结为: 功能添加型(able结尾) "可以做什么?" 举例: Hashable: 给你的实例添加一个生成哈希值的功能。 Equatable
阅读全文
摘要:让不同类型支持ForEach 什么是ForEach SwiftUI的ForEach类型使我们能够通过转换集合中的每个元素来创建一系列视图。但是,由于ForEach重用了它创建的视图以优化性能(就像其他基于列表的视图一样,如UITableView和UICollectionView一样),它要求我们提供
阅读全文
摘要:关闭NavigationLink叠加颜色 navigationLink的行为类似于Button,它获得蓝色的默认按钮样式。使用.renderingMode(.original)仅适用于图像视图。 最好使用修改器将默认按钮样式更改为普通样式 .buttonStyle(PlainButtonStyle(
阅读全文
摘要:SwiftUI制作View可嵌套组件 了解嵌套组件制造原理 制作一套嵌套组件 掌握配置嵌套组件的preview的方法 如何初始化嵌套参数 基础构造 struct ENavigationView<Content: View>: View { let viewBuilder: () -> Content
阅读全文
摘要:Swift 5.1 新语法 单表达式隐式返回值 在 Swift 5.0 之前的语法中,如果一个闭包表达式只有一个表达式,那么可以省略 return 关键字。 现在 Swift 5.1 以后的版本中计算属性和函数语句同样适用。 // before swift 5.0 struct Rectangle
阅读全文
摘要:MVVM Model Model 是用来表示我们会对其进行处理的实际数据,而且其中不应该包含逻辑。 View View 是直接与用户交互的,也不应该包含逻辑,只需要告诉它如何显示,并且在触发事件之后进行转发。 ViewModel ViewModel 会跟踪 View 的事件,和Model 层传给它的
阅读全文
摘要:SwiftUI - init SwiftUI 中init方法,会在编译期进行预加载 init() { } List样式设置init方法中预onAppear中的区别 // 全局生效,以项目中最后加载的init方法中的设置为准 init() { UITableView.appearance().sect
阅读全文
摘要:SwiftUI制作View可嵌套组件 了解嵌套组件制造原理 制作一套嵌套组件 掌握配置嵌套组件的preview的方法 如何初始化嵌套参数 基础构造 struct ENavigationView<Content: View>: View { let viewBuilder: () -> Content
阅读全文
摘要:Basic Gestures 基本手势 TapGesture LongPressGesture DragGesture MagnificationGesture RotationGesture Combined Gestures 合并手势 SequenceGesture SimultaneousGe
阅读全文
摘要:opacity(Double) -> View 设置视图的透明度。 scaleEffect() -> View 相对于锚点,在水平和垂直方向上按给定的比例或尺寸缩放此视图的渲染输出,可以用于设置动画 快捷键 Option-Command-Return快速打开预览 Command-Shift-L或者点
阅读全文
摘要:SwiftUI 要点笔记 resizable() 自适应大小 * 图片没有完全显示全,我们可以用Image的resizable()来让图片自动适应 .aspectRatio(contentMode: .fit) 设置图片的显示模式 Identifiable主要作用就是作为一个对象的唯一标识。能够与L
阅读全文
摘要:SwiftUI 中引入了一个关键字 @State 来作为数据绑定的标识。当一个被绑定的数据被改变时,相关联的视图会重新计算它自己的 body 内容;反过来,当视图主动去改变绑定在数据上的属性时,这个数据也会随之变化 SwiftUI 的数据流模型是基于下面两点原则来构建的: Data Access a
阅读全文
摘要:SwiftUI 探索 - 闭包总结 SwiftUI 探索 - 状态和数据流 SwiftUI 探索 - 不透明返回类型 SwiftUI 探索 - Combine SwiftUI使用UIKit框架,控制器需实现UIViewControllerRepresentable协议,视图需实现UIViewRepr
阅读全文
摘要:WebView 用于展示一个打开的网页。 UIViewController 用于展示在 SwiftUI 中打开 UIKit 的 UIViewController ,并且在 UIViewController 中打开 SwiftUI View。 Alert 用于展示一个弹框提醒,需要与点击事件关联起来。
阅读全文
摘要:NavigationView 用于创建包含顶部导航栏的视图容器。 TabView 用于创建包含底部 ** TabBar** 的视图容器。 Text 用来展示一行或多行的文本内容,效果等同于 UILabel,但更加优秀。 如果要创建 Text, 只需通过 Text("SwiftUI") 即可创建; 采
阅读全文
摘要:新建SwiftUI文件 预览 SwiftUI可以实时看到对页面的做出的修改,纯SwiftUI时,默认静态预览。点击预览串口的Resume按钮可查看。 预览包含UIView子类视图时,需要打开时时预览 如果没有显示预览窗口则按下图操作打开即可 拖放 command键 + 鼠标点击组件,可以方便的添加组
阅读全文
摘要:创建ios模板 集成 gitlab graphql aws 可以请求rest graphql aws对象存储
阅读全文
摘要:iOS-xctool https://github.com/facebook/xctool 问题描述 xcode7之后xctool不再负责Build和Archive,需要借助xcodebuild、xcbuild完成。 简介 Facebook提出的意在解决xcodebuild脚本输出的可读性差、运行灵
阅读全文
摘要:Apollo运行脚本分析 #!/usr/bin/env bash # Exit on all errors, undeclared variables and pipefailures. set -euo pipefail # Get the path to the script directory
阅读全文
摘要:订阅 GraphQL支持订阅,允许客户端在服务器上的数据发生更改时立即进行更新。 Apollo iOS库主要通过ApolloWebSocket支持订阅的使用,这是一个可选的附加库,它使用流行的iOS WebSocket库Starscream来连接到GraphQL服务器。 通过代码生成还支持订阅:每当
阅读全文
摘要:温故GraphiQL学习指南相关笔记,加深对GraphiQL基本类型、查询、突变、订阅的理解 结合项目实际理解对象的传递 mutation CreateReviewForEpisode($episode: Episode!, $review: ReviewInput!) { createReview
阅读全文
摘要:渐变探索 // 线性渐变 LinearGradient(gradient: Gradient(colors: [.red,.green]), startPoint: UnitPoint.topLeading, endPoint: UnitPoint.bottomTrailing) .frame(wi
阅读全文
摘要:使用输入和枚举类型 利用输入类型,我们提高了传递给变更参数的复用性,同时也不容易出错。当把输入类型和枚举类型结合起来时,我们可以更具体地说明可以提供给特定字段的输入类型。输入类型和枚举类型非常好用,结合在一起使用更能起到事半功倍的效果。 用新的输入类型运行变更 还需要在Query Variables
阅读全文
摘要:Form: 会让一些控件有一些特殊的外观变化,更好的是,SwiftUI的几个部分自动适应放置在表单中 - 它们的外观和行为发生变化,因此它们与其他输入控件组一起工作得更好。 Form 组件使用分组 List 来表示 cell 中的子控件。通过将布局包裹在 Form 中,SwiftUI 能够改变每个元
阅读全文
摘要:创建GraphQL API 语言、环境、工具包 GraphQL.js + express-graphql + ApolloServer GraphQL规范发布的时候,它就致力于对查询语言和类型系统的提供解释。同时有意识地模糊了服务器实现方面的细节,从而让各种语言的开发者都能将其应用到他们的项目中。
阅读全文
摘要:mutation 变更 变更(mutation)类型必须定义在schema中。从技术上讲,在schema中定义查询或变更没有区别。不同之处在于这么做的意图。只有当所做的操作或事件会改变应用的状态时,我们才应该创建变更类型 变更定义 调用传参 输入类型,(input type) 输入类型input定义
阅读全文
摘要:多对多连接,由两个一对多连接组成 直通类型,用来连接两个节点的节。如一个叫作Friendship的直通类型,通过它我们便可连接两个朋友,同时也可以传递关于朋友之间如何连接的数据: 联合类型 ,是可以用来返回的几种不同类型之一。在一个联合类型下我们可以加入任意数量的类型。使用管道符(|)简单分隔即可。
阅读全文
摘要:REST API是端点的集合 GraphiQL是Type类型的集合 SDL (Schema DefinitionLanguage)模板定义语言。与GraphQL查询语言一样,无论使用何种语言或框架构建应用程序,GraphQL SDL都是相同的。GraphQL schema文档是定义应用程序中可用类型
阅读全文
摘要:参数传递 自定义参数 方法定义 GraphiQL Client客户端,数据请求,参数传递 参数传递 数据请求 mutations 修改数据 认证与中间件
阅读全文
摘要:样式系统指的是对 UI 设计视觉规范中,提炼出来的一些规范。如项目的整体色调及字体、字号 样式系统 对 App 开发存在的意义 当UI设计师出具完项目的整体UI视觉规范之后,开发通过提炼样式系统,对整体视觉有更好的全局掌握。 对于UI设计师,梳理视觉规范,定义哪些是通用规则,哪些是个性规则,哪些是基
阅读全文
摘要:初学层次 简单使用HStack + Image + TextField等控件组合,快速实现需求 import SwiftUI struct SignUpForm0: View { @State var username = "" @State var pwd = "" var body: some
阅读全文