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如下:

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 总结的更多相关文章

  1. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  2. 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 ...

  3. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

  4. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程

    下载 Xcode 8,配置 iOS 10 和 Swift 3 (可选)通过命令行编译 除 非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变.如果你想的话,打开 Xcod ...

  5. iOS 10.0 更新点(开发者视角)

    html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...

  6. iOS 10、Xcode 8 遇到部分问题解决记录

    今天把iphone 6 升级到ios10 后,用Xcode 7进行真机调试的时候提示: Could not find Developer Disk Image 果断准备升级到Xcode 8 .但是想保 ...

  7. 在 iOS 10.0 之后, App 要调用手机相机与相簿应注意的事项

    iOS 的 SDK 每一年至少都会有一次大改版,从 2009 到 2016 年,版号已经到了第 10 版了,很轻易的就追上了 Mac OSX. 每一次的大改版都会有不少新的功能或新的规范,在 iOS ...

  8. 【转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模拟器上的问题很多,本人也差点放弃 ...

  9. Xcode 8.0 新特性 & Swift 3.0 增加的变动

    从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...

随机推荐

  1. 关于JdbcTemplate的queryForList返回值

    通过spring的jdbctemplate返回的list其实封装的是需要通过如下方法得到里面的内容的 public void getAllUsers() { List allUsers = new A ...

  2. poj1483 It's not a Bug, It's a Feature!

    It's not a Bug, It's a Feature! Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 1231   ...

  3. [置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  4. 文件对话框WPF(5)----文件浏览对话框

    废话就不多说了,开始... WPF中文件浏览对话框的实现可以利用Windows API Code Pack,它是一个用于访问Windows Vista/7 特性的托管代码函数库,但并没有包含在.NET ...

  5. Linux内核 hlist_head/hlist_node结构解析

    内核中的定义: struct hlist_head {    struct hlist_node *first;}; struct hlist_node {    struct hlist_node ...

  6. Maven3在Eclipse上安装插件

    eclipse 安装插件的方式最常见的有两种: 1. 一种是在线安装,这貌似是用的最多的,就是:Help -->  Install New Software,然后输入 HTTP 地址来安装,但有 ...

  7. 不惧面试:HTTP协议(1) - 基础扫盲

    v博客前言 先交代下背景,之前在一家公司面试.NET开发,去了先是做一份笔试题,有一半是关于HTTP协议的,技术总监直接面试,也是问一大堆HTTP协议的知识点,可能跟该公司的产品有关,该公司属于互联网 ...

  8. 用C++实现斐波那契数列

    我是一个C++初学者,控制台输出斐波那契数列. 代码如下: //"斐波那契数列"V1.0 //李国良于2017年1月12日编写完成 #include <iostream> ...

  9. angularjs的懒加载

    1.angularJS懒加载依赖模块 //设置 .config [ '$ocLazyLoadProvider' ($ocLazyLoadProvider) -> # We configure o ...

  10. 一台服务器上同时启动多个 Tomcat

    在同一台服务器上启动多个 Tomcat 服务,需要修改 conf/server.xml文件里的三个部分,如下: 1.修改Http访问端口(默认为8080端口) <Connector port=& ...