Swift是Apple在WWDC2014所發(fā)布的一門(mén)編程語(yǔ)言,可以用來(lái)編寫(xiě)iOS應(yīng)用程序。在設(shè)計(jì)Swift時(shí).就有意和Objective-C共存。蘋(píng)果宣稱(chēng)Swift的特點(diǎn)是:快速、現(xiàn)代、安全、互動(dòng),且全面優(yōu)于Objective-C語(yǔ)言。2015年06月09日,蘋(píng)果通過(guò)WWDC大會(huì)上宣布Swift開(kāi)源。這意味著可以用它來(lái)進(jìn)行開(kāi)發(fā)跨平臺(tái)的應(yīng)用。現(xiàn)在已經(jīng)有人使用Swift來(lái)開(kāi)發(fā)服務(wù)端程序了。這些看上去都十分美好。但是Swift經(jīng)歷的時(shí)間畢竟太短,版本變化太快,甚至于1.0,2.0簡(jiǎn)直就是2個(gè)語(yǔ)言。何況很多公司的項(xiàng)目都是Objective-C進(jìn)行編寫(xiě)的,要想一下子轉(zhuǎn)成Swift進(jìn)行開(kāi)發(fā)還是有較大的難度的。所以本課程會(huì)以O(shè)bjective-C為主要語(yǔ)言。在課程技術(shù)的時(shí)候補(bǔ)充下Swift語(yǔ)言語(yǔ)法。學(xué)一門(mén)編程語(yǔ)言其實(shí)難度不大,難得是需要去學(xué)習(xí)框架,了解框架,這些都需要花大量的時(shí)間。一旦我們學(xué)會(huì)了UIKit等框架之后用Swift編寫(xiě)App是很容易上手的。希望能幫到你,歐克
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了長(zhǎng)白免費(fèi)建站歡迎大家使用!
本文轉(zhuǎn)自: iOS開(kāi)發(fā):Objective-C精確的貨幣計(jì)算 - ArthurChen - 51CTO技術(shù)博客
iOS開(kāi)發(fā)中有時(shí)需要我們精度的嚴(yán)格處理,比如關(guān)于用戶(hù)資金的數(shù)目處理,比較好的建議是服務(wù)端直接返回金額數(shù)目為字符串類(lèi)型,這樣客戶(hù)端就不用擔(dān)心精度顯示了,如果我們需要對(duì)服務(wù)端返回過(guò)來(lái)的數(shù)據(jù)進(jìn)行操作,比如:服務(wù)端兩個(gè)數(shù)字float a = 0.01, int b = 99999999,兩數(shù)相乘的結(jié)果是999999.99,就需要考慮精度的問(wèn)題了。再比如對(duì) flat a = 123456789.12,int b = 10000,兩數(shù)相除
在iOS開(kāi)發(fā)中,和貨幣價(jià)格計(jì)算相關(guān)的,需要注意計(jì)算精度的問(wèn)題。即使只是兩位小數(shù),也會(huì)出現(xiàn)誤差。使用float類(lèi)型運(yùn)算,是完全不夠的。經(jīng)過(guò)一番測(cè)試,最后選擇使用系統(tǒng)提供的API的NSDecimalNumber來(lái)進(jìn)行更好的解決。
作為一個(gè)對(duì)外的庫(kù),鑒于版本延續(xù),我們保留對(duì)外的flaot的類(lèi)型,不改變接口,選擇進(jìn)行內(nèi)部適配。
以下是一些基本的測(cè)試,
原始數(shù)據(jù)
floata =0.01;
intb =99999999;
doublec =0.0;
1:使用浮點(diǎn)運(yùn)算,
c = a*b;
NSLog(@"%f",c);
NSLog(@"%.2f",c);
使用double類(lèi)型存儲(chǔ)沒(méi)有觸及問(wèn)題的實(shí)質(zhì),完全不能解決。
2011-12-30 11:04:00.121 Untitled[2912:207] 1000000.000000
2011-12-30 11:04:00.123 Untitled[2912:207] 1000000.00
2:使用類(lèi)型轉(zhuǎn)換,提高精度
c = a*(double)b;
NSLog(@"%f",c);
NSLog(@"%.2f",c);
Double運(yùn)算的精度是提高了,可是浮點(diǎn)數(shù)的數(shù)值早已經(jīng)出現(xiàn)了精度的不準(zhǔn)確,即使存儲(chǔ)空間足夠,同樣還是不準(zhǔn)確的數(shù)值。
2011-12-30 11:04:00.123 Untitled[2912:207] 999999.967648
2011-12-30 11:04:00.124 Untitled[2912:207] 999999.97
3:通過(guò)和NSString的轉(zhuǎn)換,將計(jì)算的原始數(shù)據(jù)轉(zhuǎn)換為純粹的double類(lèi)型的數(shù)據(jù),這樣的計(jì)算精度就可以達(dá)到要求了。
NSString*objA = [NSStringstringWithFormat:@"%.2f", a];
NSString*objB = [NSStringstringWithFormat:@"%.2f", (double)b];
c = [objAdoubleValue] * [objBdoubleValue];
NSLog(@"%.2f",c);
計(jì)算的結(jié)果還是比較準(zhǔn)確的,不過(guò)需要做格式化輸入和格式化輸出的處理。同時(shí)使用NSString來(lái)轉(zhuǎn)換,這樣的寫(xiě)法看起來(lái)比較奇怪。
2011-12-30 11:04:00.190 Untitled[2912:207] 999999.99
4:個(gè)人還是比較喜歡使用系統(tǒng)提供的類(lèi)型來(lái)進(jìn)行計(jì)算。通過(guò)NSDecimalNumber提供的計(jì)算方式,可以很好的計(jì)算出準(zhǔn)確的精度的數(shù)據(jù),同時(shí)不需要使用格式化輸出等。
其計(jì)算的精度是比較高,這是官方建議的貨幣計(jì)算的API,對(duì)乘除等計(jì)算都有單獨(dú)的API接口來(lái)提供。
NSString *decimalNumberMutiplyWithString(NSString*multiplierValue,NSString*multiplicandValue)
{
NSDecimalNumber*multiplierNumber = [NSDecimalNumberdecimalNumberWithString:multiplierValue];
NSDecimalNumber*multiplicandNumber = [NSDecimalNumberdecimalNumberWithString:multiplicandValue];
NSDecimalNumber*product = [multiplicandNumberdecimalNumberByMultiplyingBy:multiplierNumber];
return[productstringValue];
}
NSLog(@"%@",decimalNumberMutiplyWithString([NSStringstringWithFormat:@"%f",a], [NSStringstringWithFormat:@"%d",b]));
2011-12-30 11:0 4:00.251 Untitled[2912:207] 999999.99
只是測(cè)試,所以接口名大致寫(xiě)寫(xiě),名字取得比較不那么講究,希望可以表達(dá)清楚。
總的來(lái)說(shuō),對(duì)于貨幣計(jì)算,應(yīng)該需要注意精度的問(wèn)題。同時(shí)在運(yùn)算的時(shí)候,應(yīng)該優(yōu)先選用框架提供的API,否則,就應(yīng)該使用足夠精度的類(lèi)型運(yùn)算,同時(shí)對(duì)自己寫(xiě)的接口進(jìn)行足夠的說(shuō)明,要求開(kāi)發(fā)者按照規(guī)范來(lái)使用。
在自己不能保證足夠準(zhǔn)確的情況下,用適當(dāng)?shù)恼f(shuō)明的要求來(lái)規(guī)避責(zé)任還是可以接受的。至少被人抱怨兩句總比出錯(cuò)強(qiáng)。
我最近也在做后端,Python,Ruby,Node 都用了一下,最后選擇 NodeJS。
在選擇時(shí),Ruby on Rails,Django 第一個(gè)出局,因?yàn)榭紤]到 API 應(yīng)該輕,快。
Python 曾經(jīng)用過(guò) Flask,考慮過(guò) Bottle。不過(guò)兩者的 Extensions 的功能都無(wú)法需求。
Ruby 的 Sinatra 是最好用的。選擇 Sinatra + Mongoid,一個(gè)星期可以搞出來(lái)(我自己的情況)。
現(xiàn)在選擇用 NodeJS 的 ExpressJS + Mongoose 搭配。從 Ruby 轉(zhuǎn)成 Node,主要是因?yàn)榭瓷?NodeJS 的性能。Request per Second 的話,NodeJS 7000 左右,ExpressJS 3000 左右,Sinatra 900 左右,Ruby on Rails 300 左右。
我寫(xiě) JavaScript 都是用 CoffeeScript 寫(xiě)的,所以寫(xiě)起來(lái)就像寫(xiě) Ruby 或 Python 一樣,非常 Lisp。
ExpressJS 的開(kāi)發(fā)也是這些框架里面,最活躍的。
掌握技術(shù)和管理兩方面的吧 技術(shù)方面:熟悉掌握Objective-C語(yǔ)言、XCode開(kāi)發(fā)環(huán)境、ios UI布局、架構(gòu)計(jì); 理解面向?qū)ο笤O(shè)計(jì)的基本原則,熟悉常用的設(shè)計(jì)模式,有獨(dú)立分析和解決問(wèn)題的力; 理解手機(jī)客戶(hù)端軟件及服務(wù)端開(kāi)發(fā)特點(diǎn); 管理方面: 理解和分析產(chǎn)品需求,制定合理開(kāi)發(fā)計(jì)劃; 負(fù)責(zé)公司IOS端APP的開(kāi)發(fā)和維護(hù); 帶領(lǐng)團(tuán)隊(duì)解決各種開(kāi)發(fā)上的問(wèn)題,確保項(xiàng)目按期完成; 提升團(tuán)隊(duì)成員整體水平,對(duì)產(chǎn)品提出改進(jìn)意見(jiàn);
第一步:編程入門(mén)課
時(shí)間預(yù)計(jì):4個(gè)星期
推薦看公開(kāi)課,Udacity也行,網(wǎng)易公開(kāi)課也行,自己找一個(gè)面對(duì)對(duì)象語(yǔ)言(一般是JAVA, C++, Python)的課。我是在網(wǎng)易公開(kāi)課看的斯坦福的CS106A,學(xué)的JAVA。
如果你純粹學(xué)iOS開(kāi)發(fā),不推薦看哈佛CS50,CS50是給CS系的學(xué)生介紹整個(gè)計(jì)算機(jī)世界的框架,講的內(nèi)容比較多,進(jìn)度比較快,對(duì)iOS開(kāi)發(fā)其實(shí)有點(diǎn)累贅了。(臣妾有點(diǎn)跟不上?。。。?/p>
計(jì)劃安排是一天一課,看課程要求的書(shū)(至少看完一本)及大部分作業(yè)。這一階段重點(diǎn)不是語(yǔ)法,而是以下3個(gè)目標(biāo)。
目標(biāo):
1. 讓自己對(duì)編程這件事感到適應(yīng)。
寫(xiě)hello world。
怎么寫(xiě)function, 怎么調(diào)用function。
全局變量,局部變量這類(lèi)基本知識(shí)點(diǎn)。
都是基本的東西??纯磿?shū),寫(xiě)多兩個(gè)程序就歐啦。
2. 掌握編程語(yǔ)言的基本要素。
編程語(yǔ)言4個(gè)要素:
a. 基本的數(shù)據(jù)類(lèi)型:整數(shù),實(shí)數(shù),character, string, boolean
b. 基本的運(yùn)算符號(hào):+-×/++--那啥的
c. 怎樣輸入輸出
d. 怎樣控制程序:sequence,selection,loop
3. 了解編程范式
面對(duì)過(guò)程編程。
面向?qū)ο缶幊獭?/p>
第二步:上手iOS!
時(shí)間預(yù)計(jì):2星期
強(qiáng)烈推薦CS193P,老頭子講的超級(jí)好!我的很多東西(對(duì)象思維啥的)是在這里跟著做練習(xí)的時(shí)候才真正明白的(好啦,也可能是上一堂課練習(xí)做得少的原因)。如果等到9月應(yīng)該itunes U上會(huì)開(kāi)始教iOS 7了。網(wǎng)易公開(kāi)課的是2010年iOS 5版的,前10堂課,也行。(iTunes U上有完整的課)
CS193P說(shuō)有prerequisite,一開(kāi)始被嚇到,事實(shí)證明還是可以學(xué)下去的。頭兩節(jié)課一頭霧水,沒(méi)關(guān)系,把itunes U上的課件下載下來(lái),把所有代碼打出來(lái),然后一個(gè)個(gè)元素對(duì)應(yīng)之前學(xué)的語(yǔ)言匹配,再不懂先放著,繼續(xù)學(xué)后邊的,過(guò)幾天打多點(diǎn)代碼就懂了。
感覺(jué)學(xué)5、6堂課,一個(gè)星期左右就可以開(kāi)始進(jìn)入下一階段自己做東西了。之后用啥學(xué)啥,每堂課都有主題的。速度慢點(diǎn)的同學(xué)們,這階段跟我一樣準(zhǔn)備兩個(gè)星期吧!
第三步:開(kāi)發(fā)app!
時(shí)間預(yù)計(jì):2星期(本人...1個(gè)半月,實(shí)在不好意思說(shuō)出口)
這個(gè)時(shí)間就可長(zhǎng)可短啦,還包括美工,交互啥的。堅(jiān)持要用啥學(xué)啥的原則,其實(shí)就是知道iOS SDK都有什么組件,每個(gè)組件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有個(gè)師傅,這個(gè)階段真的是進(jìn)步神速。
好的!不出意外,你的第一個(gè)app就這么新鮮出爐了!從今天開(kāi)始,成為一個(gè)冷艷逼格高尚的iOS開(kāi)發(fā)者吧!