【IOS开发新技术】swift4.0 新特性

Swift4.0--Photos框架的使用附从相簿中获取图片 首先发布Demo链接 Photos从相簿中获取图片效果展示 (一) Photos简介 在iOS 8之前,开发者只能用 AssetsLibrary 框架访问的用户的照片库。几年以来,相机应用和照片应用发生了显著的变化,增加了许多新特性,包括按时刻来组织照片的方式。但与此同时,AssetsLibrary 框架却没有跟上步伐。 随着 iOS 8 的到来,苹果给我们提供了一个现代化的框架 阅读详情

#1.添加Codable协议,方便自定义数据类型序列化
#2.添加定义多行字符串语法
#3.改进key-value coding的keypath
#4.修改并强化字典功能
#5.字符串变为集合类型

1.Swifty encoding and decoding:

在Objective-C中值类型的相互影响是十分糟糕的。比如NSCoding协议,类继承它之后,我们需要在类中重写自定义的 encoding 和 decoding方法。这样显得十分痛苦而且很容易出错。
在swift4.0 中,引入了新的Codable协议,可以让你在不添加其他特殊代码的情况下序列化和反序列化自定义的数据类型,从而不用担心值类型的丢失。更漂亮的是,你可以选择数据被序列化为什么样的格式:plist(XML)或者JSON。
是的,Swift 4 可以让你在不添加任何特殊代码的情况下将自定义数据类型序列化为JSON。
以代码为例:
首先,我们自定义一个数据类型:

struct Language:Codable {
    var name: String
    var version: Int
}

let swift = Language(name:"Swift",version:4)
let php = Language(name:"PHP",version:7)
let perl = Language(name:"Perl",version:6)

让Language这个结构体遵从Codable协议,我们便可以将它转化为json格式的数据展示:

let encoder = JSONEncoder()
let encoded = try? encoder.encode(swift){
    //...
}

Swift将会自动编码你的数据类型中的所有属性。
我们可以使用encode和decode方法来编码和解码对象:

let encoder = JSONEncoder()
let encoded = try? encoder.encode(swift)
if encoded != nil {
    if let json = String(data: encoded!,encoding:.utf8){
        print(json)
    }
}

let decoder = JSONDecoder()
if let decoded = try? decoder.decode(Language.self, from: encoded!)
{
    print(decoded.name)
}

同样可以有PropertyList的encode和decode:

//PropertyList
let propertyListEncoder = PropertyListEncoder()
let propertyListed = try? propertyListEncoder.encode(php)

let propertyDecoder = PropertyListDecoder()
if let value = try? propertyDecoder.decode(Language.self,from: propertyListed!)
{
   print(value.name)
}

了解更多关于swift4.0 encode和decode的内容,可以参考链接:the Swift Evolution proposal for this new feature

2.多行文字的字符串:

之前我们可以通过使用"\n"来使字符串换行。比如:

let beforeString = "When you write a string that spans multiple \nlines make sure you start its content on a  \nline all of its own, and end it with three \nquotes also on a line of their own. Multi-line strings also let you write \"quote marks\" \nfreely inside your strings, which is great!"
//print(beforeString)

这种方式阅读起来很不方便,看起来很不美观,不能直观的显示它所要呈现给用户展示的样子。
在swift4.0中,提供了专门的语法来显示多行字符串,从而告别转义。

let longString = """
When you write a string that spans multiple
lines make sure you start its content on a
line all of its own, and end it with three
quotes also on a line of their own.
Multi-line strings also let you write "quote marks"
freely inside your strings, which is great!
"""
print(longString)

语法说明:
1.以三个双引号作为开始的标识。
2.以三个双引号作为结束的标识。
3.不管开始标识还是结束标识,都必须单独占据一行
4.你定义的字符串就是开始标识和结束标识中间的样子

了解更多可以参考链接:the Swift Evolution proposal for this new feature.

3.改进key-value coding的keypath

Swift中如何使用keypath呢?
首先,我们定义两个结构体:

struct Crew {
    var name: String
    var rank:String
}
struct Starship {
    var name: String
    var maxWarp: Double
    var captain: Crew
    func goToMaximumWarp(){
        print("\(name) is now travelling at warp \(maxWarp)")
    }
}

let janeway = Crew(name:"Kathryn Janeway",rank:"Captain")
let voyager = Starship(name: "Voyager", maxWarp: 9.975, captain: janeway)
let enterWarp = voyager.goToMaximumWarp
enterWarp()

在Swift中,我们可以给函数添加一个引用。比如,我们可以给goToMaximumWarp()方法添加一个叫做enterWarp的引用,之后我们便可以使用enterWarp来调用它。然而,我们却不能对属性做同样的操作。是的,我们不能给Starship的name属性添加一个引用。
这个问题,可以通过使用keypath来解决:正如enterWarp()一样,它们是未被调用的属性引用。 如果您现在调用引用,则得到当前值,但如果稍后调用引用,则获得最新值。
keyPath的语法格式为反斜杠:

let nameKeyPath = \Starship.name
let maxWarpKeyPath = \Starship.maxWarp
let captainName = \Starship.captain.name

之后你便可以在Starship的实例中使用它了:

print(voyager[keyPath: nameKeyPath])  //Voyager
voyager[keyPath: nameKeyPath] = "456"
print(voyager.name)   //456
voyager.goToMaximumWarp()  //456 is now travelling at warp 9.975
enterWarp()  //Voyager is now travelling at warp 9.975

let starshipName = voyager[keyPath: nameKeyPath]
let starshipMaxWarp = voyager[keyPath: maxWarpKeyPath]
let starshipCaptain = voyager[keyPath: captainName]

想要了解更多,可以参考链接:the Swift Evolution proposal for this new feature

4.改进了字典功能:

Swift4.0 让Dictionary的功能更强大。
在Swift3.0 中,Dictionary的filter函数会返回一个包含key/value元组的数组。
比如:

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000];

let massiveCities = cities.filter { $0.value > 10_000_000 }

在Swift3.0中,你不能通过massiveCities["Shanghai"]来获取对应的值。因为massiveCities不是一个字典类型。只能通过massiveCities[0].value来获取。
但在Swift4.0中,massiveCities是字典类型,使用massiveCities["Shanghai"]获取值完全没有问题。

print(massiveCities["Shanghai"] ?? "nil Value");

想要了解更多,可以参考链接:the Swift Evolution proposal for these new features.

5.String 又变成了集合类型:

这意味着,你可以做字符串倒置,循环获取每个字符,map(),flatMap()等操作。
比如:

let quote = "It is a truth universally acknowledged that new Swift versions bring new features."
let reversed = quote.reversed()

for letter in quote {
    print(letter)
}

另外,Swift4.0 中,引入类似于python中字符串的一些操作。在省略起始位置或者结束位置的情况下,可以自动推断集合的起始位置或者结束位置。

let characters = ["Dr Horrible", "Captain Hammer", "Penny", "Bad Horse", "Moist"]
let bigParts = characters[..<3]
let smallParts = characters[3...]
print(bigParts)    //["Dr Horrible", "Captain Hammer", "Penny"]
print(smallParts)   //["Bad Horse", "Moist"]

想要了解更多,可以参考链接:the Swift Evolution proposal for this new feature.

原文链接:http://www.jianshu.com/p/8b5344da29d8

 【关于我们】

才淇(微信公众号:caiqicehua),专注于国内各大互联网公司社会招聘内推。每天更新最新互联网名企(包括但不限于今日头条、网易游戏、BAT、网易互联网、小米、京东、乐视、携程等名企)内推信息,有技术岗、有产品岗、有运营岗、有设计岗、有交互岗、有销售岗,更有其他N多相关岗位!更多内推信息请扫描以下二维码关注查阅。

 

3、iOS 14、Swift 5.2 与 Swift 5.3 新特性及 Dark Mode 介绍 本文详细介绍了 iOS 14 的隐私新特性、Swift 5.2 与 Swift 5.3 的多项语言改进,以及 Dark Mode 的实现与优化。涵盖键路径表达式作为函数、用户定义标称类型的可调用值、多模式 catch 子句、多个尾随闭包、枚举类型的合成可比较一致性、逃逸闭包中隐式 self 的改进、基于类型的程序入口点、Float16 等语言特性,同时深入探讨了 Dark Mode 的视图处理、资源管理及用户体验优化,帮助开发者构建更现代、更友好的 iOS 应用。 阅读详情

相关推荐

iOS开发Swift编程精通视频教程

在Swift中,函数是一等公民,可以被赋予变量,作为参数传递,也可以作为返回值。基本函数的声明语法非常简单,首先指定函数的返回类型,然后是函数名称和参数列表。例如,一个返回整数类型的函数可以声明如下:在上述代码中,add是函数名,a和b是参数名,Int是参数和返回值的类型。调用函数时只需指定函数名和提供必要的参数值:let result = add(3, 5) // result 将会是 8。

weixin_30248619的博客 727

Swift 高阶函数详解(forEach、filter、map、flatMap、compactMap、reduce、sorted)

现在这篇关于高阶函数的介绍,它来了。内容主要是介绍 forEach、filter、map、flatMap、compactMap、reduce、sorted等 7 个函数的作用,以及他们的使用方式。本文可以当做字典按需查阅。

Veggie的博客 4380

Xcode for iOS12.0开发工具包详解

本文还有配套的精品资源,点击获取 简介:Xcode是苹果官方的集成开发环境,专用于开发iOS、macOS、watchOS和tvOS应用。本文档深入解析了Xcode针对iOS 12.0版本的专门支持工具包,包括性能优化、屏幕时间、AR增强、勿扰模式和Siri快捷方式在内的iOS 12.0新特性,并介绍了Xcode 10的特性,如Swift 4.2、通用购买、App Store...

weixin_35755434的博客 1657

【C语言】小白乔做的一些小题,不好的地方来指教哦

这些都是按照我自己的理解做的,新手上路,有不完善的地方也有方法笨拙的地方,有问题可以留言一起交流 《1》 青年歌手参加歌曲大奖,有5个评委打分,写一个求平均分的程序,但是要求去除最高分和最低分 《2》 输入数字,输出星期几 《3》 在屏幕上输出如下图形 键盘输入n,比如输入3如下 * * * * * * 《4》 一球从100米高度自由落下,每次落地后反跳回原高666度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

qyt_722的博客 429

Xcode 12.0与SDK:全面支持iOS 12及最新技术特性

Xcode 12.0作为苹果公司为开发者提供的最新集成开发环境(IDE),是开发iOS、macOS、watchOS以及tvOS应用不可或缺的工具。自Xcode 12.0发布以来,它带来了诸多改进和新特性,旨在提升开发者的编码体验、增强应用的性能以及简化应用调试流程。在这一章节中,我们将探究Xcode 12.0的核心功能以及它如何协助开发者高效地构建、测试和优化应用程序。我们会从界面布局的变化讲起,深入理解新的编码工具和编辑器特性,以及如何利用Xcode 12.0的新功能提高工作效率。

weixin_34718952的博客 1312

iOS 12.0镜像包完整开发测试资源

iOS 12.0是苹果公司在2018年9月17日正式发布的移动操作系统版本,版本号为16A366,标志着iOS平台在性能优化与功能拓展方面的一次重要升级。该版本在保持对旧设备兼容性的同时,显著提升了系统响应速度,尤其在iPhone 6及更早设备上表现突出。相较于前代iOS 11,iOS 12.0在界面交互、AR能力、FaceTime功能以及隐私保护机制等方面进行了多项增强与重构。从系统架构角度看,iOS 12.0引入了ARKit 2框架,支持多人增强现实体验,并首次引入了。

weixin_36012152的博客 854

Swift之过滤器(filter)

Swift 提供了很多方便的函数来操作数组,比如 filter,map,reduce,flatMap 等.今天我们了解一下 filter ,顾名思义 就是用来过滤的,这是 Swift 为每个数组提供的一个新式武器,filter用于选择数组元素中满足某种条件的元素。 假设有一个数组,接着想要创建一个新的数组,新数组包含原数组中所有大于20的元素,我们可以使用下面的for循环: l

欢迎来到Jack的程序世界 3370

ios-Swift4.0已经4.0最新语法的使用.zip

Swift4.0已经4.0最新语法的使用,实现一个简单的小项目,基本包含了日常所需要的基本功能,作为新手可以看看

Swift 5 Dictionary用法大全

系统: Mac OS 10.15.2, XCode 11.3,swift 5.0 写作时间:2020-01-08 说明 import UIKit // MARK: Creating Dictionary //var someDict = KeyType: ValueType var dict = Int: String var dict1:[Int: String] = [1:“One”, 2:“...

AI架构师易筋 5170

iOS 11应用开发基础教程Swift4.0

开发 iOS 应用程序既有趣又回报丰厚,如果您是一位新手,自然想知道从哪里入手。本路线图提供了 iOS 应 用程序开发的绝佳起点。在 Mac 电脑上,您可以创建在 iPad、iPhone 和 iPod touch 上运行的 iOS 应用程序。 遵循本路线图以了解如何取得开发工具,理解主要概念及最佳实践,并学会查找更多信息。

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 405

Swift中的高阶函数: Filter, Map, Reduce, flatmap, compactMap(译)

自从我详细了解函数和闭包后,我就想去知道它们的优点和在编程中的使用, 我的理解是高阶函数的使用是基于集合类型的。 根据我的理解,高阶函数就是把另一个函数或者闭包当做参数并且返回值。 首先,我来解释一下。思考下面的代码将会使你对高阶函数的理解更深: // 将函数当做参数传递给另一个函数 func addation(num1: Double, num2: Double) -> Double {...

weixin_33724659的博客 488

手机Camera硬件电路设计:从电源管理到信号完整性的实战解析

本文深入解析了手机Camera硬件电路设计的核心挑战与实战经验,重点聚焦于电源管理与信号完整性两大基石。文章详细阐述了AVDD、DVDD、IOVDD和AFVDD四路电源的差异化设计要点与噪声控制策略,并剖析了MIPI等高速信号通道的完整性设计原则,为硬件工程师提供了从理论到PCB布局布线的完整实战指南。

weixin_28308325的博客 249

iOS 15.4新特性:如何使用RSBarcodes_Swift快速实现最新Codabar编码标准

随着iOS 15.4的发布,开发者对条码生成与识别功能的需求日益增长。RSBarcodes_Swift作为一款专注于iOS平台的1D和2D条码处理库,凭借其简洁的API设计和全面的编码支持,成为众多开发者的首选工具。本文将详细介绍如何利用RSBarcodes_Swift实现最新的Codabar编码标准,帮助开发者在iOS应用中快速集成高效的条码解决方案。 ## Codabar编码标准简介 📊

gitblog_01068的博客 1036

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6811

IKM 测试题 - Java SE 8 评估测试题目

IKM 测试题 - Java SE 8 评估测试题目

licheng11y的博客 1313

swift4.0语法杂记

原文地址:https://www.jianshu.com/p/06b9ddf748f7 (如有侵权,请联系我删除。) 小视频 001--swift简史小视频 002--Playground体验 003--常量&amp;变量 一、swift简史 1、介绍   swift是苹果公司于2014年推出用于撰写OS和iOS应用程序的语言。它由苹果开发者工具部门总监“克里斯.拉特纳”在2010...

lrbtony的博客 760

用Verilog搭出RISC-V架构单周期CPU

这是笔者学校暑期学期的必修课,难度并不高(仅追求及格的话),但相当耗时,对于在硬件设计方面完全不感冒的同学更是一场避不开的折磨,所以笔者想通过自己的成果和被折磨经验来帮助有此方面需求的同学,或是对于CPU设计有浓厚兴趣的人。

paticita的博客 1万+

iOS内购收据验证终极方案:TPInAppReceipt 4.0新特性详解

TPInAppReceipt是一款专注于iOS内购收据本地验证的高效工具库,能够帮助开发者轻松实现收据的读取与合法性验证,确保应用内购买功能的安全可靠。本文将为你详细介绍TPInAppReceipt 4.0版本带来的全新特性和改进,助你快速掌握这一终极验证方案。 [![TPInAppReceipt Logo](https://raw.gitcode.com/gh_mirrors/tp/TPInA

gitblog_00199的博客 234

C/C++基础讲解(四十三)之图形篇之绘制直线、圆、圆弧、 椭圆

程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:绘制直线 实例2:绘制圆 实例2:绘制圆弧 实例2:绘制椭圆

hnjzfwy的博客 1234

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 302

Swift语言的iOS开发

在移动互联网迅猛发展的今天,iOS系统因其优良的用户体验和强大的生态系统而备受青睐。作为苹果公司推出的操作系统,iOS设备在全球范围内拥有大量的用户,这使得iOS应用开发的市场潜力巨大。在众多开发语言中,Swift作为苹果官方推出的编程语言,其性能与安全性得到了广泛认可。本文将从Swift语言的起源、特点、开发环境、基本语法、常用功能、实际应用以及未来展望等多个方面深入探讨Swift在iOS开发中的应用。

2501_91366458的博客 485

软考高级架构师笔记-10数学计算题

专栏《软考高级架构设计师》更新了,本章列举了10个场景计算题的解法,温故而知新,大家快来卷一卷

java后端开发的博客,不仅仅是后端开发 1597

swift4.0语法杂记(精简版)

小视频 001--swift简史小视频 002--Playground体验 003--常量&amp;变量 一、swift简史 1、介绍   swift是苹果公司于2014年推出用于撰写OS和iOS应用程序的语言。它由苹果开发者工具部门总监“克里斯.拉特纳”在2010年开始着手设计,历时一年完成基本的架构。到后来苹果公司大力投入swift语言的研发,于2014年发布这一语言的第一版本。...

小天空的博客 1503

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Swift 4.0 编码规范,持续更新中...(已更新Swift 5.0)

自Swift 3.0 以来,语言已经比较成熟,用Swift语言来开发iOS App 的开发者越来越多,那么一份权威而全面的规范就很有必要了。苹果官方的文档一般都很少去看,笔者参考官方文档和各路大神的经验,写下了一份基于Swift 4.0 的编码规范,并会持续更新,欢迎大家补充指正。 编码格式 命名规范 语法规范 1. 编码格式 1.1 使用二元运算符(+, -,==,

Andy Coding 5637

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS - Swift Swift 语言新特性

&#13; 1、Swift 2.0 带来哪些新变化 常规变化: 1、OS X 10.11、iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, 如可空性、类型化集合和一些别的特性。 2、编译器对冗余的协议一致性,未被使用的绑定值以及可以设为常量的变量这些情况目前会给予警告或报错。 3、修复了跨文件协议遵循...

rstbfveradsvc 404

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Android O / Android 8.0 新特性及开发指南
下一篇: 【 Docker技术学习】从开发到部署会用到的 Docker 命令
caiqicehua
博客等级 码龄10年 153粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值