IOS开发入门之Swift:一个简单的货币转换器App在iOS10中的分析和完善
白羽 2018-11-23 来源 :网络 阅读 1051 评论 0

摘要:本文将带你了解IOS开发入门Swift:一个简单的货币转换器App在iOS10中的分析和完善,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门Swift:一个简单的货币转换器App在iOS10中的分析和完善,希望本文对大家学IOS有所帮助。



        

这本不算是一个完整的货币转换App,只不过是一个小巧的学习性质的程序.该App覆盖了如下几个知识点:

多国语言的支持 通过网络Api接口读取数据

最后我们来修复一个原来代码中的一个小错误作为完美的收尾工作

全部代码用最新的Xcode8.0 + swift 3.0重写,你可以了解swift最新的语法,各种简洁的爽ing…

首先从网上download三个国家的图片下来:

 

注意设置好图片的名称,代码中要用到.

因为本篇博文不是面向那种非常入门级的初学者,所以有些操作只是一笔带过,如果列位对于一些细节有不明白的地方,可以在下面直接回复询问.

用Xcode新建一个单视图项目,在其中加入一个Strings File,命名为Localizable.strings:

 

打开该文件,敲入以下内容:


   

"Rate" = "Rate: %@";

"Total" = "Total: %@";

"Choose Currency" = "Choose a currency";

"flagicon" = "english";

"Cancel" = "Cancel";

   

打开该项目(Project,注意不是Targets哦!)设置窗口的Info选项卡,在Localizations列表中新建2个配置,分别是中国和西班牙:

 

回到Localizable.strings文件,进入inspector选项卡,点击Localize按钮:

 

选择你的Base语言:

 

你会发现原来的Localize按钮的位置变成了你选择国家的配置内容,确保选中你新增的国家:

 

这时你会发现Xcode左侧的资源导航栏的Main.storyboard和Localizable.strings被扩展了:

 

我们发挥想象力将其内容修改为对应国家的内容吧!以下是我修改的中文语言的内容,首先是Main.strings (Chinese (Simplified)):


   

/* Class = "UILabel"; text = "Currency Converter"; ObjectID = "nvc-oG-Tuy"; */

"nvc-oG-Tuy.text" = "货币转换器";

 

/* Class = "UITextField"; placeholder = "Amount of money"; ObjectID = "taC-uW-ikM"; */

"taC-uW-ikM.placeholder" = "多少钱啊!?";

   

然后是Localizable.strings (Chinese (Simplified))文件:


   

"Rate" = "汇率: %@";

"Total" = "总额: %@";

"Choose Currency" = "选择一种货币";

"flagicon" = "china";

"Cancel" = "取消";

   

我们要从网络Api接口取数据,该接口的名称为:https://api.fixer.io/latest

很不幸,新版的iOS默认不允许非https开头的连接,你可以到本猫写的另一篇blog中查看解决办法:

iOS9 中关闭ATS的方法

轻松搞定ATS之后,我们需要设计UI,类似如下画面:

 

在把需要连接的outlet连接好之后,我们简单看一下最核心的setup方法.该方法有将近50行代码,它主要干了如下这些事:

1.根据源货币和目的货币生成url:


   

let url = URL(string: "\(baseurl)?base=\(fromCurrency)&symbols=\(toCurrency)")!

        print("GET URL:\(url.absoluteString)")

   

2.建立一个session.dataTask,将取回的数据转换为json格式的对象

3.将json对象中对于的数据取出显示出来,对于需要多国语言支持的地方,我们用了以下方法:


   

self.rateLabel.text = String(format: NSLocalizedString("Rate", comment: ""), currencyFormatter.string(from: NSNumber(value: ratio!))!)

   

下面我们运行一下App看看效果:

 

没什么意外的,下面我们进入iPhone的系统设置界面:

通用->语言和地区设置,将Language和Region选项全部改为中国,改完后的界面如下:

 

我们再运行一下App:

 

OK!不过实际测试中如果源货币和目标货币相同的话,你猜会怎么样!?

App会突然崩溃掉哦!

调试发现此时以下一句会返回nil:


   

let rates = json["rates"] as! [String:Double]

   

为了更好地解释这个错误的原因,我们手动创建一个查询url字符串,输入到浏览器中:

 

是滴,你没看错,从url取回的数据中rates没有内容,所以我们不能指望网络Api接口,我们需要在代码中做些调整.

进入setup方法,在开头增加一句:


   

var ratio:Double?

        if fromCurrency == toCurrency{

            ratio = 1.0

        }

   

然后在session.dataTask的闭包中将原来ratio的位置修改如下:


   

if ratio == nil{

                ratio = rates[self.toCurrency]

            }

   

现在我们App可以很好地处理各种货币种类的情况了,包括源货币和目标货币相同的情况啦!

(PS:文字没有测试国家为西班牙的情况,大家可以自行测试)

          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程