Objective-C 入門指南 - 編碼與解碼

使用者按下編碼 (encode) 的 Encode 按鈕或解碼 (decode) 的 Decode 按鈕,可能會有三種情況發生




前兩種情況,使用者尚未輸入文字或還沒按下 NewLoad 按鈕建立 Encrypt 物件 (object) ,都有可能導致程式發生不明原因的錯誤,這一方面,我們需要自行設計防止錯誤發生的機制。


使用者沒有輸入文字的話,屬性 (property) inputText 就會是 nilnil 表示非物件的意思。如果發生這種情況,就不應該繼續編碼或解碼
if (inputText == nil || ![inputText compare: @""]) {
    [displayField setStringValue: @"This is Encode button. No input string!!"];
}


連續兩個 || 為邏輯上的或運算子 (operator) ,上面我們把空的 NSString 字串 (string) 也納入條件之一, compare: 為比較原 NSString 字串是否與參數相同,相同就回傳整數 0 ,所以前面另外加上 ! 邏輯的補數運算子,因此 ![inputText compare: @""] 表示 inputText 與 @"" 相同就回傳整數 1 ,也就是 Yes 。


同樣,使用者沒有按下 NewLoad 按鈕建立 Encrypt 物件,屬性 encrypt 也會是 nil
if (encrypt == nil) {
    [displayField setStringValue: @"This is Encode button. No Encrypt object!!"];
}


若是,使用者已經輸入文字,又有按下 NewLoad 按鈕建立 Encrypt 物件,那就可以編碼或解碼囉!下面是編碼的部份
outputText = [outputText stringByAppendingString: [encrypt toEncode: inputText]];
   
[outputField setStringValue: outputText];
[displayField setStringValue: @"This is Encode button. The result is above."];


解碼的部份如下
outputText = [outputText stringByAppendingString: [encrypt toDecode: inputText]];
   
[outputField setStringValue: outputText];
[displayField setStringValue: @"This is Decode button. The result is above."];


我們把編碼的相關程式碼以上組合放進 encode: 方法 (method) 中
- (IBAction) encode: (id)sender {
    outputText = @"";
 
    if (inputText == nil || ![inputText compare: @""]) {
        [displayField setStringValue: @"This is Encode button. No input string!!"];
    }
    else {
        if (encrypt == nil) {
            [displayField setStringValue: @"This is Encode button. No Encrypt object!!"];
        }
        else {
            outputText = [outputText stringByAppendingString: [encrypt toEncode: inputText]];

            [outputField setStringValue: outputText];
            [displayField setStringValue: @"This is Encode button. The result is above."];
        }
    }
}


我們用巢狀的 if-else 組合這些條件,首先,若 inputText 是空字串,全部的工作就 displayField 印出提示訊息,接著結束。若 inputText 不是空字串,就繼續測試是否存在 encrypt ,如果沒有就印出提示訊息,然後結束,如果有的話,才會進行編碼的工作,並將編碼結果放在 outputField 內。


另外 decode: 如下
- (IBAction) decode: (id)sender {
    outputText = @"";
 
    if (inputText == nil || ![inputText compare: @""]) {
        [displayField setStringValue: @"This is Decode button. No input string!!"];
    }
    else {
        if (encrypt == nil) {
            [displayField setStringValue: @"This is Decode button. No Encrypt object!!"];
        }
        else {
            outputText = [outputText stringByAppendingString: [encrypt toDecode: inputText]];
   
            [outputField setStringValue: outputText];
            [displayField setStringValue: @"This is Decode button. The result is above."];
        }
    }
}


Build and Go ,來編碼看看囉



接下來,我們繼續設置清除與拷貝的功能吧!


中英文術語對照
編碼encode
解碼decode
物件object
屬性property
運算子operator
字串string


您可以繼續參考
GUI 篇


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

沒有留言: