Vücudunda bir Objective-C bloğu dışında bulunan çeşitli değişkenleri değiştirmek istiyorum.Nesne-C bloklarında parametreleri değiştirin
Değişkeni bildirirken, __block
özniteliğini kullanarak bir değişkene doğrudan erişip değiştirebileceğimi biliyorum. Yani bu çalışır:
__block NSMutableString *alertMessage;
void(^appendMessage)(NSMutableString*, NSString*)= ^(NSString *append){
if (!alertMessage)
{
alertMessage = [NSMutableString new];
}
if ([append length] > 0)
{
[alertMessage appendString:@"\n"];
}
[alertMessage appendString:append];
};
appendMessage(@"Alert part 1"); //This works fine
Ancak bana doğrudan aynı erişmeden blok dışında çok sayıda değişkeni temel operasyon kullanımı sağlayan bir geçti değişken üzerinde bir işlem gerçekleştirebilen bir blok oluşturmak istiyorum. Aşağıdaki gibi bir şey:
__block NSMutableString *alertMessage;
__block NSMutableString *otherString;
void(^appendMessage)(NSMutableString*, NSString*)= ^(NSMutableString *string, NSString *append){
if (!string)
{
string = [NSMutableString new];
}
if ([append length] > 0)
{
[string appendString:@"\n"];
}
[string appendString:append];
};
//The following do not work as intended
appendMessage(alertMessage, @"Alert Part 1");
appendMessage(otherString, @"Bleh bleh");
Ben ondan önce ilan değişkenlerini değiştirmek için yukarıdaki bloğu kullanmak isterler.
Böyle bir işlemi nasıl başarabilirim? Bu mümkün mü?
Sadece bunu yapan bir C işlevi oluşturabilirsiniz. Neden bu amaçla bir blok kullanmak istersiniz? –
@WolfgangSchreurs Blokta belirtilen işlem belirli bir fonksiyon içerisinde gereklidir. Bir C fonksiyonu aslında bir blok içinde aynı işlemi bildiren hile (veya bu konu için bir Objective-C) yaparsa da, kodun fonksiyon içinde kullanımının yanı sıra aynı şekilde daha okunabilir hale getirilmesinin ek yararı olacaktır. – ZeMoon
neden bloğu önce (dışarıda) parametresini başlatamazsınız, bu 'soruna' neden olan tek şey budur – Wain