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.

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.

Nincsenek hozzászólások.
süti beállítások módosítása