swift4更新中所遇到的一些问题总结

 更新时间:2020年6月30日 23:37  点击:1670

前言

最近Swift 4发布了,完整的更新日志请点击这里 >>: ,我大概看了下官方的更新日志,因为xcode9同时支持Swift4和Swift3.2,所以在升级Swift4的时候心没有那么的痛,在转换成Swift4时错误集中在添加@objc上,如果项目是OC和Swift共存的项目,那么添加@objc会让你加到怀疑人生。

下面主要给大家介绍了在更新过程中遇到的一些问题,下面话不多说了,来一起看看详细的介绍吧。

@objc

1、在Swift4中,OC和Swift共存的项目不再无脑将Swift的Public属性和方法提供给OC,除非Swift中的方法和属性用@objc标记,这样就减少了一些代码的生成从而减少了包的大小。build之后我们是纯swift项目所以大部分是在选择器调用的方法前面也要添加@objc。

2、我们的项目是Swift的项目所以build保存很快就修改完成,Run起来后如期的Crash了。这个是因为我们的JSON转Model是使用的OC版的Mantle和SwiftJSON进行的解析,那么就要在所有的Model属性前面添加@objc,不然Mantle在获取类属性类型的时候是空的。看到这个时候内心是崩溃和拒绝升级Swift4的,所以我们选择舍弃Mantle使用Codable。

Codable( 官方文档)

1、在OC中JSON转Model只能转化为对象类型,在Codable支持JSON转为常规类型。而遇到的更多的是将数据模型中的NSNumber改为Int或者Double,这是因为NSNumber是OC的类型不遵守Codable的。

2、有时候我们会在Model中添加一些JSON串没有的字段进行逻辑处理,类似

struct A: Codable{
 var a: Int? 
 var isSelect: Bool = false
}

因为"isSelect"是为了逻辑处理在JSON串中并不能找到相应的字段,这个时候就会报出数据丢失的错误,而我们只需要将“isSelect”改成可选就可以了。

stuct A: Codable {
 var a: Int?
 var isSelect: Bool?
}

在这次升级中主要是在改这OC调用Swift添加@objc的问题和将数据解析改成Codable。还有一些错误是因为使用Mantle转JSON串出现的问题只要使用JSONEncode,还有会多出字符串长度判断使用characters的警告删除它就OK了。

平常使用泛型一个很烦的操作

我定义一个带有泛型的方法

private func getData<T>(a: T) {
}

直接调用

self.getData<A>(a)

因为不知道泛型的类型而出现

Cannot explicitly specialize a generic function

的错误,  如果不指定类型

self.getData(a)

会出现下面的额错误

Generic parameter 'Element' could not be inferred

只能在使用时进行一次强转

self.getData(a as A)

就是让Xcode推断出他的类型而不是你告诉他这个泛型是什么类型,这就很烦。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对猪先飞的支持。

[!--infotagslink--]

相关文章

  • Mybatis Plus 字段为空值时执行更新方法未更新解决方案

    这篇文章主要介绍了Mybatis Plus 字段为空值时执行更新方法未更新解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-03
  • vivo OriginOS新系统如何更新 originos系统更新方法

    vivo新系统更新的步骤是什么?如何更新到vivo的最新系统?vivo的最新系统太亮眼了,不少vivo的用户都在跃跃欲试想体验一下最新的系统。vivo新系统虽然做出来了不过我们想体验的话还是要等待一段时间。到时大家通过下面的方法就可以使用到新系统了...2020-12-08
  • Android studio4.1更新后出现的问题详解

    这篇文章主要介绍了Android studio4.1更新后出现的问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-14
  • pytorch 自定义参数不更新方式

    今天小编就为大家分享一篇pytorch 自定义参数不更新方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-29
  • C#实现在线更新软件

    winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了这一缺陷,有较好的参考价值...2020-06-25
  • PostgreSQL 更新视图脚本的注意事项说明

    这篇文章主要介绍了PostgreSQL 更新视图脚本的注意事项说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-26
  • php update数据更新简单实例

    sql update记录更新详细实例 语法: [ WITH <common_table_expression> [...n] ] UPDATE [ TOP (expression) [ PERCENT ] ] { { table_alias | <object>...2016-11-25
  • sql server中批量插入与更新两种解决方案分享(asp.net)

    xml和表值函数的相对复杂些这里简单贴一下bcp和SqlDataAdapter进行批量跟新插入方法,未经整理还望见谅...2021-09-22
  • MySQL 8.0.23 主要更新一览(新特征解读)

    这篇文章主要介绍了MySQL 8.0.23 主要更新一览(新特征解读),需要的朋友可以参考下...2021-01-25
  • PyTorch实现更新部分网络,其他不更新

    今天小编就为大家分享一篇PyTorch实现更新部分网络,其他不更新,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02
  • postgresql 两表关联更新操作

    这篇文章主要介绍了postgresql 两表关联更新操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-02
  • php快速url重写更新版[需php 5.30以上

    类只能php教程 5.30以上的版本才能使用,继承了上一个版本的快速重定向的特点(单独类,全部使用静态调用),增添了一个很重要的功能和属性 可以调用其他url中的模块了 也...2016-11-25
  • MySQL的源码安装及使用UDFs进行数据自动更新的教程

    UDFs即是MySQL的用户自定义函数的缩写,配合触发器可以自动更新Memcached与MySql的数据,这里我们就来总结一下MySQL的源码安装及使用UDFs进行数据自动更新的教程:...2016-07-25
  • mysql更新一个表里的字段等于另一个表某字段的值实例

    下面小编就为大家带来一篇mysql更新一个表里的字段等于另一个表某字段的值实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-03-14
  • Visual Studio 2013更新内容简介

    这篇文章主要为大家分享了Visual Studio 2013更新内容简介,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 基于R语言中的各种更新方法分享

    这篇文章主要介绍了基于R语言中的各种更新方法分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • 在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据

    GridView控件内置的编辑功能只能对每行进行编辑,做不到批量编辑。为此,我们需要将GridView里的列转换为TemplateFields,通过一个单独的“Update All”按钮,在按钮的事件中批量处理每一行。...2021-09-22
  • 动态组合SQL语句方式实现批量更新的实例

    动态组合SQL语句方式实现批量更新的实例,需要的朋友可以参考一下...2021-09-22
  • PHP自动更新新闻DIY

    我们浏览一些网站的时候,往往看到一些新闻是刚刚更新不久的,假如要是人工维护的话,那会是一项非常繁琐的工作。然而,我们可以通过程序来控制实现更新操作,事情就会变得很方...2016-11-25
  • MySQL使用外键实现级联删除与更新的方法

    这篇文章主要介绍了MySQL使用外键实现级联删除与更新的方法,详细分析了mysql数据库与表的创建、数据插入、查询以及外链的使用与级联操作相关技巧,需要的朋友可以参考下...2016-07-25