2009.06.01. 19:33
Logikai típus kiíratása avagy BOOL konvertálása NSStringgé
Előbb-utóbb mindenki beleszalad ebbe a problémába, és több-kevesebb próbálkozás után rájön, hogy ObjCben nem lehet csak úgy emberi formátumra hozni a BOOL típust. Ezt az időt szeretnénk nektek megspórolni az alábbi kis függvénnyel, amit a Learn Objective-C on the Mac című könyvből loptunk egyenesen a 14. oldal aljáról, íme:
NSString *boolToString (BOOL yesNo) { if (yesNo == NO) { return (@"NO"); } else { return (@"YES"); } }
Kicsit bővebben
Habár az objektumoknak van describe
metódusuk, ami a Java-s/C#-os toString
megfelelője, ez nem használható a BOOLnál. Az Objective-C BOOL
típusa valójában egy szerencsétlen char megerőszakolása, amint az objc.h
-ban láthatjuk:
typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_DEFINED #define YES (BOOL)1 #define NO (BOOL)0
Namost C-ben logikailag minden igaz, ami nem 0. Megfordítva, a 0 az tuti hamis, a többi meg igaz. Ezért hasonlítunk előbb a NO-val, mert az objCben és sima C-ben is hamis, minden más pedig "YES" lesz az else ágban. Így jól működik sima C bool és ObjC BOOL paraméterrel is.
Szólj hozzá!
Címkék: convert konvertálás string objective c objc bool sztring tostring robjc r ovar nsstring
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.