Objective c синтаксисі

Менobjective-cпрограммалау үшін жаңа. Көптеген оқулықтарда осы форматта кодты көрдім:

[[classname function] function];

Мысалға:

[[NSString alloc] initwithformat:parameters];

Мен пластер мен сөздіктер туралы оқығанда, осы кодты көрдім:

[[self.objname objectAtIndex:indexPath.row] objectForKey:@"somename"];

I believe it follows the syntax: [[objectname function] function]

Біреу түсіндіруі мүмкін, бұл синтаксис қалай жұмыс істейді және бірінші және екінші мысал арасындағы айырмашылық.

Сондай-ақ, осы мысалдар үшін C немесе Java-да баламалы мәлімдемелерді бере алатын болсаңыз өте пайдалы болар еді.

1
Mkb редакциялары ОЖ-ны білдіреді, себебі түпнұсқа синтаксисі заңсыз ( [classname function] функциясы] ).
қосылды автор Rob Napier, көзі

7 жауаптар

[ClassName methodName] is how you call a class method. The equivalent in Java is Classname.methodName();

[object methodName] is how you call a normal instance method. The equivalent in Java is object.methodName();

Objective C-де сіз [] жақшаларындағы 'ұя салуға' болады. [[Classname method1] method2] әдісі method1 деп аталатын әдіске шақыру болып табылады, ол method2 код> осы нысанда.

The equivalent in Java would be Classname.method1().method2();

Сондай-ақ, қатаң Objective C терминологиясында сіз «нысандағы әдіс деп аталмайсыз», орнына сіз «нысанға хабар жібересіз» екенін ескеріңіз. Бірдей нәрсе, әр түрлі сөздер.

6
қосылды
Көп рақмет! Бұл өте пайдалы болды
қосылды автор user1018457, көзі

Бұл қарапайым айнымалы мәндерді немесе объектілерді жасаудан аулақ болған қарапайым нотация. Сіз өзіңіз қалағаныңызша көбіне ұя сала аласыз, бірақ кодты оқуға болады.

Мысалы: Егер сізде сурет аттары болып табылатын жолдар жиыны болса, сіз суретті алу үшін мұны істей аласыз:

NSString *imageName = [imageArray objectAtIndex:0];
UIImage *image = [UIImage imageNamed:imageName];

Егер NSString айнымалысы жоқ болса, сіз:

UIImage *image = [UIImage imageNamed:[imageArray onjectAtIndex:0]];

Таза?

1
қосылды

The. формат - алу әдісі үшін стенография. Мысалға, мысалы, егер адам нысанының жасына ие болса және сізде getAge әдісі анықталған (немесе синтезделген) болса, сіз [person getAge] немесе person.age деп қоңырау шала аласыз және баламалы нәтижелер алсаңыз болады.

0
қосылды

Менің ойымша, сіздің шатастырмаңыз нүкте-нота емес, өйткені бұл жиі жаңа әзірлеушілерді шатастырады. Бұл тілге ыңғайсыз және жақындығы болды. Сондай-ақ, mkb түзетулерінің дұрыс екендігіне сенемін, себебі бастапқы кодыңыз заңды болмады.

Бұл қоңырау:

[[self.objname objectAtIndex:indexPath.row] objectForKey:@"somename"];

Is precisely the same as Бұл қоңырау:

[[[self objname] objectAtIndex:[indexPath row]] objectForKey:@"somename"];

C ++ тәрізді тілде баламалы болуы мүмкін:

this.objname.objectAtIndex(indexPath.row).objectForKey("somename");

Бұл қатал эквиваленттілік, себебі ObjC және C ++ әдістері қалай аталатынына қатысты әртүрлі тәсілдер бар, бірақ көп жағдайда бұл бірдей болады.

Басқа кәрістермен танысу қызықтыруы мүмкін. Сондай-ақ, objective-cбағдарламалау тілін қатты ұсынамын бастама ретінде немесе тақырып бойынша қатты кітап.objective-cJava және C ++-ден өте ерекшеленеді, және менің тәжірибем бойынша, оны қабылдауға тырысып, кейінірек елеулі шатасуға және бұзылуға әкеледі. «ObjC-те бұл C ++-ді қалай жасауға болады?» Дегенді білмей-ақ, өз тілін үйрену керек. Жауаптың жартысы бар: жоқ.

0
қосылды

Жақсы, алдымен бірінші нәрсе. [[obj method1] method2] нұсқасы method1 хабарламасын obj жібереді және содан кейін method2 [obj method1] мәнінің қайтару мәні.

Екінші мысал: [[self.objname objectAtIndex: indexPath.row] objectForKey: @ «somename»] - біраз күрделі. self.objname - бұл self нысанының objname сипатына қатынау (өзі әрқашан өз меншікті нысан данасына сілтеме жасайды). [self.objname objectAtIndex: indexPath.row] objectAtIndex хабарламасымен self.objname қайтаратын нысанға жіберіледі, indexPath.row . indexPath - тағы да объект болып табылады және сіз row сипатына қол жеткізесіз. Және қайтарылған мәнде сіз objectForKey хабарламасын @ «somename» параметрімен жібересіз. @ «Str» объектілі-c жолдары үшін кіріктірілген синтаксис.

HTH

0
қосылды

Жалпы, жақшалар сіз нысанға хабар жіберетінін білдіреді. Хабарлама сондай-ақ, нысан болып табылатын мәнді қайтарса, сіз сол нысанға хабар жібере аласыз. Сіздің бірінші мысалыңыздың ішкі хабарламасы alloc NSString сынып нысанына жібереді. Бұл NSString түріндегі бөлінген нысанға көрсеткішті қайтарады. initWithFormat: деген хабарлама жолдың мазмұнын инициализирует.

Java-де бұл келесідей:

public class NSString {
  public static NSString alloc() {
    return new byte[];
  }
  public void initWithParameters(Map params) {
    /* initialize */
  }
}

және кейбір басқа файлдарда:

NSString str = NSString.alloc().initWithParameters(params);

бірақ Java-ның объектілі үлгісіobjective-cсияқты емес, сондықтан бұл тек қана жақындату.

0
қосылды
рахмет. нақты, мен іздеймін
қосылды автор user1018457, көзі

[self.objname objectAtIndex: indexPath.row] objectForKey: @ «somename»]; бұл негізінен:

Жиымның ішіндегі сөздік бар (массив objname) және objectAtIndex сөздікке бағытталған. Осыдан кейін сөздікте осы пернелер үшін бірқатар кілт және мән бар. ObjectForKey: id жасай отырып, мәнді бағдарсыз.

Біршама ұзынырақ қарапайым синтаксис:

 NSDictionary *dict = [objname objectAtIndex:indexPath.row];
 NSLog(@"%@", [dict [email protected]"key"];
0
қосылды