iOS 10 / Swift 3.0 / XCode 8 总结
1,iOS10 新增的privacy settings
iOS10添加了新的权限控制范围 如果你尝试访问这些隐私数据时得到如下错误:
> This app has crashed because it attempted to access privacy-sensitive
> data without a usage description. The app's Info.plist must contain
> an NSCameraUsageDescription key with a string value explaining to the
> user how the app uses this data
因为它企图访问敏感数据时没有在应用程序的Info.plist
设置privacy key 新增的privacy setting如下:
2, OS_ACTIVITY_MODE
更新Xcode 8 如果控制台出现enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0enable_oversize: 可通过如下方法设置:
Edit Scheme-> Run -> Arguments,
在Environment Variables里边添加
OS_ACTIVITY_MODE = Disable
3,iOS10 layoutIfNeed
iOS10 在一个控件上调用layoutIfNeed是只会单独计算约束,它所约束的控件不会生效,想要达到之前的效果需要在父级控件上调用layoutIfNeed
4, NSDate
Swift3.0会将oc的NSDate转为Data类型,有些操作NSDate的第三方库会闪退
5, Notification
Swift3.0字符串类型的通知常量被定义为struct
static let MyGreatNotification = Notification.Name("MyGreatNotification")
// Use site (no change)
NotificationCenter.default().post(name: MyController.MyGreatNotification, object: self)'
6, Zip2Sequence(::) 被移除
在Swift3.0Zip2Sequence(_:_:)方法被替换为zip(_:_:)
7, Range<>.reversed 被移除
在Swift3.0Range<>.reversed方法被移除,被替换为<Collection>[<Range>].indices.reversed().
var array = ["A","B","C","D"]
for i in array.indices.reversed() {
print("\(i)")
}
输出:3 2 1 0
8, Range新增至四种类型
Range
CountableRange
ClosedRange
CountableClosedRange
不同的表达式会生成不同的Range
var countableRange = 0..<20 'CountableRange(0..<20)' var countableClosedRange = 0...20 'CountableClosedRange(0...20)'
9, Swift3.0 Collection 新增 index(_:)系列方法
Index的successor(), predecessor(), advancedBy(_:), advancedBy(_:limit:), or distanceTo(_:)方法被移除,这些操作被移动到Collection
myIndex.successor() => myCollection.index(after: myIndex)
myIndex.predecessor() => myCollection.index(before: myIndex)
myIndex.advance(by: …) => myCollection.index(myIndex, offsetBy: …)
10, iOS10 UIStatusBar过期
如果你需要操作UIStatusBar,在iOS10需要改为
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
11, iOS10 UICollectionView 性能优化
在iOS10 UICollectionView 最大的改变是增加了Pre-Fetching(预加载),
如果你翻看UICollectionView的最新API你可以发现新增了如下属性:
@property (nonatomic, weak, nullable) id<UICollectionViewDataSourcePrefetching> prefetchDataSource @property (nonatomic, getter=isPrefetchingEnabled) BOOL
在iOS10 Pre-Fetching 是默认开启的,如果出于某些原因你不想开启Pre-Fetching,可以通过如下设置禁用:
collectionView.isPrefetchingEnabled = false
UICollectionViewDataSourcePrefetching协议定义如下:
@protocol UICollectionViewDataSourcePrefetching <NSObject>
@required
// indexPaths are ordered ascending by geometric distance from the collection view
- (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0); @optional
// indexPaths that previously were considered as candidates for pre-fetching, but were not actually used; may be a subset of the previous call to -collectionView:prefetchItemsAtIndexPaths:
- (void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0); @end
12, iOS10 UITableView 性能优化
和UICollectionView一样UITableView也增加了Pre-Fetching技术,UITableView新增了如下属性:
@property (nonatomic, weak) id<UITableViewDataSourcePrefetching> prefetchDataSource NS_AVAILABLE_IOS(10_0);
奇怪的是UITableView并没有找到isPrefetchingEnabled属性的定义
13,iOS10 UIScrollView 新增 refreshControl 属性
UIScrollView新增了refreshControl属性
@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;
这意味着UICollectionView和UITableView都支持refresh功能了。
我们也可以脱离UITableViewController使用UIRefreshControl了。
14, Swif3.0 新增作用域访问级别 fileprivate
目前有如下访问级别:
- 公开(public)
- 内部(internal)
- 文件外私有(fileprivate)
- 私有(private)
15,Swift3.0 允许关键字作为参数标签
Swift3.0开始我们将能使用除inout var let关键字作为参数标签
// Swift 3 calling with argument label:
calculateRevenue(for sales: numberOfCopies,
in .dollars) // Swift 3 declaring with argument label:
calculateRevenue(for sales: Int,
in currency: Currency) func touchesMatching(phase: NSTouchPhase, in view: NSView?) -> Set<NSTouch>
如果你坚持要使用inout var let关键字可以使用 `` 包裹参数标签
func addParameter(name: String, `inout`: Bool)
iOS 10 / Swift 3.0 / XCode 8 总结的更多相关文章
- iOS开发swift语法0基础篇—————(swift技术交流群:361513739)
iOS开发之swift语法0基础篇:点击打开链接 swift技术交流QQ群361513739
- iOS之Xcode 8.0真机调试运行:This ** is running iOS 10.1.1 (14B100), which may not be supported
2016年10月份 苹果升级了iOS系统为10.1,xcode 8.0 运行会提示: This iPhone 5 (Model A1429) is running iOS 10.1.1 (14B100 ...
- iOS开发系列--Swift 3.0
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
- 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程
下载 Xcode 8,配置 iOS 10 和 Swift 3 (可选)通过命令行编译 除 非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变.如果你想的话,打开 Xcod ...
- iOS 10.0 更新点(开发者视角)
html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...
- iOS 10、Xcode 8 遇到部分问题解决记录
今天把iphone 6 升级到ios10 后,用Xcode 7进行真机调试的时候提示: Could not find Developer Disk Image 果断准备升级到Xcode 8 .但是想保 ...
- 在 iOS 10.0 之后, App 要调用手机相机与相簿应注意的事项
iOS 的 SDK 每一年至少都会有一次大改版,从 2009 到 2016 年,版号已经到了第 10 版了,很轻易的就追上了 Mac OSX. 每一次的大改版都会有不少新的功能或新的规范,在 iOS ...
- 【转1】Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结
Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结 关于 Appium 1.6.3 在Xcode 8, 10.2 的iOS模拟器上的问题很多,本人也差点放弃 ...
- Xcode 8.0 新特性 & Swift 3.0 增加的变动
从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...
随机推荐
- Arduino live weather broadcasting 实时天气站
Live broadcasting with arduino get a pc , make it run linux. make arduino catch the weather sensor a ...
- Java线程同步之一--AQS
Java线程同步之一--AQS 线程同步是指两个并发执行的线程在同一时间不同时执行某一部分的程序.同步问题在生活中也很常见,就比如在麦当劳点餐,假设只有一个服务员能够提供点餐服务.每个服务员在同一时刻 ...
- 新软件马上就要完成了,先发篇文章YY下
最近一直都在搞网站抓取方面的开发,闲着无聊逛逛论坛,发现有些帖子还是写的相当不错的,只是一篇一篇的点进去比较麻烦,于是就写了个小软件只是为了方便查看博客园和CSDN上的优秀文章.其实这个还可以拓展的, ...
- Android获取SD卡中选中图片的路径(URL)
最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: [html] view plain copy <?xml ver ...
- Android开发(24)---安卓中实现多线程下载(带进度条和百分比)
当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...
- Android 架构艺术之MVP
MVP是Google官方发布的Android开发相关的架构知识.本文要讲解的是一种最基本的MVP的实现方式,它使用手动的依赖注入来提供具有本地和远程数据源的存储库.异步任务处理回调. 基本的MVP的项 ...
- 用Vue中遇到的问题和处理方法(一)
用Vue开发项目有一段时间,在实际项目中遇到一些问题,在里把问题记录下来,并附上解决方案,给遇到同样的问题的码友提供一个解决思路吧: 测试部抛出问题一:在Vue1.0路由vue-router中,当点击 ...
- 驱动07.USB驱动程序
1 了解USB识别的过程 eg:在Windows系统下的一个现象:把手机的USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱 ...
- NG2入门 - 架构
AngularJS2 学习 继TypeScript之后,终于到了ng2的学习路程,同样学习根据angular官网文档进行,对文档中的内容根据自己的理解略有改动.看官可看官网文档,也可以看本系列博文 首 ...
- Xshell和VirtualBox虚机CentOS7的连接
后面的不能连接问题,出处为 http://m.blog.csdn.net/article/details?id=52755571 1.centos7的ip ,这里的enp0s3相当于eth0,是一个默 ...