Цел C: как да получите еквивалент на низ или име на променлива на извикване на аргумент на метод

Искам да направя прост метод, който регистрира рамката на изгледа, но също така регистрира името на конкретния вход на изгледа. Има ли лесен начин да получите еквивалента на низа на извикания изглед, освен въвеждането на низ като аргумент на метода?

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@'s frame is: origin x: %f, origin y: %f, size x: %f, size y: %f", view ,view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);

}

[self printViewFrame:myView];

ЗАБЕЛЕЖКА: засега правя само това, което е малко грозно:

-(void)printViewFrame:(UIView*)view name:(NSString*)name {

    NSLog(@"%@'s frame: %@",name, NSStringFromCGRect(view.frame));

}

person Mr Wolf    schedule 08.01.2013    source източник
comment
Какво имате предвид под „еквивалент на низ“? Можете ли да дадете пример?   -  person Carl Veazey    schedule 08.01.2013
comment
да, така че с други думи първото нещо в моя дневник по-горе ще бъде myView, последвано от произхода x, y и размера x, y.   -  person Mr Wolf    schedule 08.01.2013
comment
Вижте името? какво означава?   -  person CRDave    schedule 08.01.2013
comment
Търсите ли начин да отпечатате името на променлива, предадена на метода?   -  person Andrey Chernukha    schedule 08.01.2013
comment
да, променлива. Така мисля, съжалявам, трябваше да го кажа така.   -  person Mr Wolf    schedule 08.01.2013


Отговори (4)


За да получите рамката на изгледа, можете да използвате NSStringFromCGRect

NSLog(@"%@",NSStringFromCGRect(view.frame));

Но ако искате да получите името на изгледа, ще трябва да го прехвърлите като NSString. Можете да прочетете само адреса на паметта на показалеца, но не и истинското му име. Най-близо до това ще стигнете

NSLog(@"%@",NSStringFromClass([view class]));

което ще изведе

UIView

person Mick MacCallum    schedule 08.01.2013
comment
Благодаря, това отпечатва името на метода. Търся променливата. - person Mr Wolf; 08.01.2013
comment
@Mrwolfy Ох, не мисля, че това е възможно. - person Mick MacCallum; 08.01.2013

извикването на вашия метод

[self printViewFrame:myView];

изпълнение на метода

-(void)printViewFrame:(UIView*)view { 

    NSLog(@"%@ : %@", NSStringFromCGRect(view.frame),NSStringFromClass(view.class));

}
person Talha    schedule 08.01.2013
comment
просто търси името на променливата. Мога лесно да го направя, но трябва да въведа името като низ. Чудех се дали има хитър начин да се улови името. - person Mr Wolf; 08.01.2013
comment
Редактирах отговора, моля, проверете го, ако това ще ви помогне - person Talha; 08.01.2013

Мисля, че единственият възможен начин да приложите това, от което се нуждаете, е да регистрирате име на променлива, преди да извикате -(void)printViewFrame: метод

person Andrey Chernukha    schedule 08.01.2013

Не знам как да направя това с някаква стандартна функция, но мога да направя това с макрос:

#define PRINT_NAME(var) NSLog(@"%s", #var)

След това просто го извиквате и той отпечатва името на променливата:

PRINT_NAME(view);

Можете също да използвате това, за да получите NSString с необходимото име:

#define GET_NAME_STRING(var) [NSString stringWithFormat:@"%s", #var]

да го използвате така:

NSLog(@"frame stuff %f,...., NAME IS %@", frame.x, ..., GET_NAME_STRING(view));

Ако имате нужда само от един метод (или няколко), можете да направите някои дефиниции, за да направите това, което искате:

#define CALL_PRINT(var) NSLog(@"%s", #var); [self printViewFrame:var]

Така че, когато се обадите

CALL_PRINT(myView);

Той ще отпечата името на изгледа и след това ще извика функцията printViewFrame.

Освен това, ако не искате да правите нищо с макроса, намерихте нещо там: име на UIView който беше докоснат.

person dreamzor    schedule 08.01.2013
comment
така че ще има изглед за печат, нали? - person Andrey Chernukha; 08.01.2013
comment
имам предвид, че изходът му винаги ще бъде същият. гледка и нищо друго - person Andrey Chernukha; 08.01.2013
comment
ти не разбираш. питащият иска да разбере каква точно променлива е била предадена на метода. но тъй като го отпечатвате ВЪТРЕ в метода, името на променливата винаги ще бъде view, което не е това, от което се нуждае питащият - person Andrey Chernukha; 08.01.2013
comment
Да, сега разбрах мисълта ти. Не мисля, че е възможно нещо да се направи, без да се прави нищо друго. - person dreamzor; 08.01.2013