为啥String和Character要单独拿出来讲呢?因为和C区别蛮大的,而且经常用到。感觉Swift的String还是没有Java的String好用。比如截串就是个麻烦的事情。以后String可能还会更新,让String变得更加好用。
需要注意的是,Swift中的String是值传递。附上String 的定义就明白了。
学Swift4之2——基本类型和基本运算
基本类型
其实和C差不多,也就是那几个。多出来的是Tuple和可选类型这两个概念
数字类型
这里记录一下每个类型的大小。
Int 在32位机器上是Int32 ,在64位机器上是Int64. 除了Int之外,还有Int,Int8,Int16,Int32,Int64.
UInt在32位机器上是UInt32 ,在64位机器上是UInt64. 除了UInt之外,还有UInt8,UInt16,UInt32,UInt64.
Double 64位浮点数
Float 32位浮点数
学Swift4之1——初见
注:个人的swift2学习笔记,根据Swift4的更新做了更新。
由于知识水平有限,如果有错误,欢迎指出。谢谢!本笔记是在有一定的编程语言基础之上写的。基础为0的朋友可能看得会有点吃力。建议可以看看C语言或OC的基础教程再来看本笔记。
写在前面,swift有一个playground类型的项目,写代码后直接就能看到结果,还是挺好玩的。
Swift和其他高级语言不同,它有变量类型的自动识别。在C语言中,我们声明一个整形变量是用
这个变量是可以改变的,如果不能改变,那么在前面加上const,这个大家都熟悉。可以理解为先有了类型,接下来才是否可以变。
但是在swift中,它首先区别的是变量还是常量。
iOS静态库.a文件的制作和使用
网上有很多教程可以参考,但是还是有一些问题的解决方法不正确。现在这里重新介绍一下。制作.a文件的过程是在移植AR库的时候碰到的,这里还使用了opencv的framework,所以还有一些使用上的问题要留意。
下面介绍.a的制作方法:
首先新建一个工程,选择Static Library。
iOS蓝牙连接
iOS蓝牙连接其实不难,可以参照官方的例子教程或者使用github的开源库babyBluetooth。
iOS蓝牙连接的流程如下:
通过服务的UUID扫描外部设备 -> 连接外部设备 -> 连接成功后扫描设备的服务 -> 发现服务后,扫描该服务的Characteristics -> 扫描到Characteristics后,进行读、写、订阅 -> 读和订阅后,有数据回来,会回调一个代理方法didUpdateValueForCharacteristic
获得数据。
下面介绍一下官方教程的代码,因为iOS是作为主端,所以只介绍主端的代码,从端的代码示例代码也有,可以参考,并不难。
iOS进度条拖动后释放抖动问题的解决
iOS的UISlider把在稍微有拖动的时候就会触发UIControlEventValueChanged这个事件,监听这个事件就可以得到当前Slider的value。但是当使用者拖动后抬起手的时候,经常会有轻微的抖动出现。这个抖动一般很难小于进度条最大值的0.1%。对于音量一些最大值不是很大的场景来讲,0.1%的误差可以接受。但是对于视频进度控制这种情况来讲,0.1%的误差在看电影的时候会显得很大。90分钟的视频,就是5400秒,它的0.1%就是5s,而且这个0.1%也是很难做到,一般的滑动会大于这个值。更要命的是,拖动的时候还显示了当前拖动的位置,但这个显示会在你松手的一刻突然变化,然后消失。用户根本来不及看最后的值,它只能看到他放手前一刻的值,但你视频跳转的时间就不对,经常会差了20多秒。
为了解决这个问题,结合iOS进度条的调用特性,给出了这样一个方法:在valueChange的回调函数中保存最近出现过的几个值(这里选择记录6个),并统计每个值出现的次数。当用户最终松手后,去遍历这几个值,找出出现次数最多的那个值,这个值一般就是用户松手前的那一个值。因为当用户真正想准确地拖动到某个位置的时候,他往往会在这个位置附件停留比较久,导致这个位置的值会多次传入到valueChange的回调函数中。对于随便一拖就放这种情况,用户根本不关心最后的位置,而这种情况下记录的值基本上也是每个值就一次。那么就选最后的值就行了,反正用户不关心。
iOS改变状态栏颜色和隐藏
状态栏在iOS系统里面高度是固定的20单位。一般改变说的改变它的颜色,其实是改变它的几个图标(信号,电池)的颜色,而且这个颜色系统是做了限制的,只有白色和黑色两种选择,称为两种style。在iOS7之前,一般用来设置style的方法是
|
|
创建属于自己的Xcode文件模板
所谓的模版,就是用XCode新建工程或文件的时候,XCode提供给我们的选择项。
在实际开发中,有些代码是十分重复的,基本上某一类的类都会用到,这样就很有必要自定义一个模板,这样每次新建这种文件的时候,这些代码都可以自动生成。
之前有提到建立一个ViewManager来对UIViewController进行瘦身,那么这里就新建一个这种UIViewController的模板,每次新建这种UIViewController的时候,都会自动生成它的ViewManager,并且已经完成了这两个类之间的绑定。
1、找到XCode的模板目录
来到 “应用程序” 目录,对XCode右击,选择”显示包内容”。 然后在打开的文件夹里面找到下面目录
|
|
在这个目录里面可以看到有
UIViewController瘦身的一些思考
在iOS开发中,界面主要涉及的类有两种:UIViewController和UIView。其中,每个UIViewController都默认包含了一个UIView。
MVC开发模式是主流的客户端编程模式。但是iOS提供的UIViewController似乎把View和Control混合在了一起。事实上也是如此,开发者可以在UIViewContrller里面得到view,进而对view进行各种操作,比如添加子视图,改变控件布局和状态等等。所以MVC进而变成了MV,Controller里面一不小心就会集合了视图控制、逻辑处理和业务相关的大部分代码,导致一个Controller显得特别臃肿。为此,必须将一些代码从UIViewController剥离出去。首先要意识到,MVC框架中,Controller的代码往往是不容易复用的。
下面是我对UIViewController瘦身的一些思考:
1、剥离业务层
得到最上面的view
得到最上面的view
|
|