記錄仿iPhone計算器Dome精度控制骄瓣、上限控制和Swift2.0中String的用法

前段時間仿iPhone計算機寫的Dome如圖(已經(jīng)完成Auto Layout)麦备,現(xiàn)在來記錄一些細節(jié)上的優(yōu)化铃肯。
先感謝Prayer等團隊翻譯的The Swift Programming Language( 中文版): http://wiki.jikexueyuan.com/project/swift/chapter2/03_Strings_and_Characters.html在該文檔中找到了Dome中使用String的所有用法涎显。
項目dome已經(jīng)上傳GitHub:
***https://github.com/BigTortoise/CalculatorLikeApple ***

4.0 4.7 5.5寸屏的適配.png

精度控制

在Dome中設(shè)置成保留10位有效數(shù)字暗膜,并使用四舍五入的保留有效數(shù)位彰导。


精度控制演示.gif
        //聲明一個常量count記錄運算結(jié)果字符的長度
        let count = display.text!.characters.count
        if count >= 11 {
            //截取前11位字符
            let OneToTen = (display.text! as NSString).substringToIndex(11)
            //截取前9位字符
            let OneToN = (display.text! as NSString).substringToIndex(9)
            //提取前11位字符中第11位字符所踊,也就是最后一位
            let end11 = (OneToTen as NSString).substringFromIndex(10)
            //提取前10位字符中第10和11位字符
            var end10 = (OneToTen as NSString).substringFromIndex(9)
            //如果第11位數(shù)字大于5泌枪,那么就要向前進位,也就是第10位+1
            if Int(end11) >= 5 {
                end10 = String(Int(end10)! + 1)
                display.text = OneToN + end10
            }   
        }

上限控制

仿造iPhone的效果秕岛,我設(shè)置用戶能輸入的位數(shù)上限位10個有效數(shù)位碌燕,運算后若數(shù)位超過10位有效數(shù)字,則用科學(xué)計數(shù)法表示继薛,如圖進行運算時修壕,1234567890*10,得出的結(jié)果為:1.23456789e11


上限控制演示.gif

遏考。

    // 創(chuàng)建operandStack數(shù)組慈鸠,記錄運算的兩個數(shù)子
    var operandStack = Array<Double>()
    // 記錄第幾次輸入數(shù)字
    var userIsInTheMiddleOfTypingANumber : Bool = false
//運算方法,結(jié)果再次存入operandStack數(shù)組
    func performOperation(operation : (Double,Double) -> Double ) {
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(),operandStack.removeLast())
            userIsInTheMiddleOfTypingANumber = false
            operandStack.append(displayValue)
        }
  }
// = 按鈕的進行運算灌具,調(diào)用performOperation的方法
    @IBAction func equals(sender: UIButton) {
        if userIsInTheMiddleOfTypingANumber {
            userIsInTheMiddleOfTypingANumber = false
            operandStack.append(displayValue)
        }
        let counts = display.text!.characters.count
        if counts >= 10 {
            //display.text = (display.text! as NSString).substringToIndex(10)
            if userIsInTheMiddleOfTypingANumber {
                userIsInTheMiddleOfTypingANumber = false
                operandStack.append(displayValue)
            }
            switch remberTheMathematicalSign {
            case "×" : performOperation {$0 * $1}
            case "÷" : performOperation {$1 / $0}
            case "+" : performOperation {$0 + $1}
            case "?" : performOperation {$1 - $0}
            default:break
            }
            TheTimeUserClickButton = ++TheTimeUserClickButton

            
        }else{
            switch remberTheMathematicalSign {
            case "×" : performOperation {$0 * $1}
            case "÷" : performOperation {$1 / $0}
            case "+" : performOperation {$0 + $1}
            case "?" : performOperation {$1 - $0}
            default:break
            }
            TheTimeUserClickButton = ++TheTimeUserClickButton
        }      
        //聲明一個常量count記錄運算結(jié)果字符的長度
        let count1 = display.text!.characters.count
        var theNumberOfZero = 1
        //計算出位數(shù)
        for var i = 6; i < count1; ++i {
            theNumberOfZero *= 10
        }
        //截取前八位字符
        let OneToTen = (display.text! as NSString).substringToIndex(8)
        //進行運算
        let x = Double(OneToTen)! / Double(theNumberOfZero)
        //再次進行截取
        let Y = (String(x) as NSString).substringToIndex(8)
        //字符串拼接
        display.text = String(Y) + "e\(count1-2)"

Dome中String的一些用法

  • 聲明一個常量count記錄運算結(jié)果字符的長度
let count1 = display.text!.characters.count
  • 截取前11位字符
let OneToTen = (display.text! as NSString).substringToIndex(11)
  • 提取11位字符串中第11位字符青团,也就是最后一位
let end11 = (OneToTen as NSString).substringFromIndex(10)
  • 字符串拼接
display.text = String(Y) + "e\(count1-2)"

其他String的一些用法

  • 字符串插值
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5"
  • 計算字符數(shù)量
let unusualMenagerie = "Koala ??, Snail ??, Penguin ??, Dromedary ??"
print("unusualMenagerie has \(unusualMenagerie.characters.count) characters")
// 打印輸出 "unusualMenagerie has 40 characters"
  • 插入和刪除
    • 調(diào)用insert(_:atIndex:)方法可以在一個字符串的指定索引插入一個字符譬巫。
var welcome = "hello"
welcome.insert("!", atIndex: welcome.endIndex)
// welcome now 現(xiàn)在等于 "hello!"
  • 調(diào)用insertContentsOf(_:at:)方法可以在一個字符串的指定索引插入一個字符串。
welcome.insertContentsOf(" there".characters, at: welcome.endIndex.predecessor())
// welcome 現(xiàn)在等于 "hello there!"
  • 調(diào)用removeAtIndex(_:)方法可以在一個字符串的指定索引刪除一個字符督笆。
welcome.removeAtIndex(welcome.endIndex.predecessor())
// welcome 現(xiàn)在等于 "hello there"
  • 調(diào)用removeRange(_:)方法可以在一個字符串的指定索引刪除一個子字符串芦昔。
let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex
welcome.removeRange(range)
// welcome 現(xiàn)在等于 "hello"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娃肿,隨后出現(xiàn)的幾起案子咕缎,更是在濱河造成了極大的恐慌,老刑警劉巖料扰,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凭豪,死亡現(xiàn)場離奇詭異,居然都是意外死亡晒杈,警方通過查閱死者的電腦和手機嫂伞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拯钻,“玉大人末早,你說我怎么就攤上這事∷低ィ” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵郑趁,是天一觀的道長刊驴。 經(jīng)常有香客問我,道長寡润,這世上最難降的妖魔是什么捆憎? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮梭纹,結(jié)果婚禮上躲惰,老公的妹妹穿的比我還像新娘。我一直安慰自己变抽,他們只是感情好础拨,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍载,像睡著了一般诡宗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上击儡,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天塔沃,我揣著相機與錄音,去河邊找鬼阳谍。 笑死蛀柴,一個胖子當著我的面吹牛螃概,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸽疾,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吊洼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肮韧?” 一聲冷哼從身側(cè)響起融蹂,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弄企,沒想到半個月后超燃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡拘领,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年意乓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片约素。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡届良,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圣猎,到底是詐尸還是另有隱情士葫,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布送悔,位于F島的核電站慢显,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏欠啤。R本人自食惡果不足惜荚藻,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洁段。 院中可真熱鬧应狱,春花似錦、人聲如沸祠丝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽疟。三九已至罐韩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間污朽,已是汗流浹背散吵。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矾睦。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓晦款,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枚冗。 傳聞我的和親對象是個殘疾皇子缓溅,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 .字符串字面量 String 在Swift中字符串字面量是由雙引號" " 包裹著的 像我們在 Swift 3 ...
    iceMaple閱讀 1,128評論 1 2
  • 53.計算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計數(shù)屬性: let unusualMena...
    無灃閱讀 1,091評論 0 4
  • // // main.swift // Swift // // Created by 空想家 on 16/7/1....
    wk空想家閱讀 389評論 0 0
  • 一說起堅持也許大家都會頭疼坛怪,因為曾經(jīng)的你可能有太多太多沒能堅持下去的事了。 你曾經(jīng)說過要健身股囊,說過要讀書袜匿,說過要寫...
    高丁一閱讀 276評論 9 3
  • 曦(mei&mei) 面朝大海,等待花開稚疹。 自從讀過海子的“面朝大海居灯,春暖花開”,我的內(nèi)心便萌生了一個大海夢内狗。我也...
    曦MEI閱讀 317評論 0 2