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 ...
随机推荐
- uploadify的使用
uploadify的使用 课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件.由于时间的关系,故采用第三方插件:u ...
- 黑马程序员:Java基础总结----JavaBean 内省
黑马程序员:Java基础总结 JavaBean 内省 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean 内省 软件包 java.beans 包含与开 ...
- 使用Maven管理依赖JAR文件,自定义项目布局,利用ANT生成不同的发布包
<?xml version="1.0" encoding="GB2312"?> <project name="CardInfo-We ...
- JS —— 轮播图中的缓动函数的封装
轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动函数~~ 我们从需求的角度开始,首先给出一个简单需求: 1. ...
- 【翻译】在Mac上使用VSCode创建你的第一个Asp.Net Core应用
Setting Up Your Development Environment 设置你的开发环境 To setup your development machine download and inst ...
- Time_wait问题小结
TIME_WAIT的产生原因 因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭.先发FIN包的一方执行的是主动关闭:后发FIN包的一方执行的是被动关闭.主动关闭的一方会进入TIME ...
- POJ3177 Redundant Paths 双连通分量
Redundant Paths Description In order to get from one of the F (1 <= F <= 5,000) grazing fields ...
- java基础练习 8
public class Eighth { /*判断101-200之间有多少个素数,并输出所有素数.素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数.也就是素数只有两个因子.*/ pu ...
- Docker集群实验环境布署--swarm【5 容器启动组件--node】
10.40.100.143 docker-node0.venic.com 10.40.100.144 docker-node1.venic.com 原用swarm镜像 直接启动 1 ...
- SpringMVC第一天(其他)
SpringMVC第一天 框架课程 课程计划 参数绑定 SpringMVC默认支持的类型 简单数据类型 Pojo类型 Pojo包装类型 自定义参数绑定 SpringMVC和Struts2的区别 高级参 ...