「看不到的不代表不存在~」,寫程式也會遇到這個現象!我在比較日期字串時,發現明明兩者都是2018-07-17,卻被判斷出不一樣!?
好在透過取得字串長度,才發現真有看不見的字元「\0」!
(lldb) po firmwareVersionLabel.text.length
32(lldb) po newVersionLabel.text.length
10
實際上2018-07-17只有10個字元,而韌體回傳卻有32個字元,於是知道後面看不到的字元共有22個。
韌體回傳的資訊:
{
boardName = “HappyStudio";
firmwareVersion = “2018-07-17″;
venderName = “Happy-Jason";
}
想要顯示在Label上,設中斷點印出來⋯⋯
Printing description of self->firmwareVersionLabel:
UILabel: 0x105c8c930; frame = (147 100; 173 32); text = ‘2018-07-17Printing description of self->newVersionLabel:
UILabel: 0x105c3c970; frame = (147 139; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4284e20>>
可以看到看不見的字元無法印完整的資訊。
最後我透過移除看不見的字元 (Remove Invisible Character),來解決問題。
/** Theme: Remove Invisible Character IDE: Xcode 9 Language: Objective C Date: 107/08/02 Author: HappyMan Blog: https://cg2010studio.com/ */ NSString *str = firmwareVersionLabel.text; NSCharacterSet *characterset = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-"] invertedSet]; firmwareVersionLabel.text = [str stringByTrimmingCharactersInSet:characterset];
字串我只想要包含「0123456789-」,可以透過反字元集合來做到移除不需要的字元。
Printing description of self->firmwareVersionLabel:
UILabel: 0x105c68760; frame = (147 100; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4282260>>Printing description of self->newVersionLabel:
UILabel: 0x105c6c4d0; frame = (147 139; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4097cf0>>
寫程式有時候會遇到莫名的現象,也許都是種看不見的問題。
隨意留個言吧:)~