Blok Bildirimi Sözdizimleri Listesi
Boyunca
return_type
nesne türü / ilkel / vb. dönmek istiyorsunuz (yaygın olarak void
)
blockName
oluşturduğunuz bloğun değişken adı olun
var_type
tür nesnesi / ilkel / vb. bağımsız değişken olarak geçmek istersiniz (parametre için boş bırakın)
varName
verilen parametrenin değişken adı olmalı
Ve istediğiniz kadar parametre oluşturabileceğinizi unutmayın.
Değişken Olarak Bloklar
Beyan için muhtemelen en yaygın olanı.
return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
// ...
};
Özellik Olarak Bloklar
Blokları değişken olarak bildirmeye benzer, ancak farklıdır.
@property (copy) return_type (^blockName) (var_type);
Parametre Olarak Bloklar
Bunun "Bağımsız Değişken Blokları" ndan farklı olduğunu unutmayın; bu örnekte, blok bağımsız değişken isteyen bir yöntem bildiriyorsunuz.
- (void)yourMethod:(return_type (^)(var_type))blockName;
Bağımsız Değişken Olarak Bloklar
Bunun "Parametreler Olarak Bloklar" dan farklı olduğunu unutmayın; bu örnekte, anonim bir bloğa sahip bir blok bağımsız değişkeni isteyen bir yöntem çağırıyorsunuz. Daha önce bir blok değişkeni bildirdiyseniz, değişken adını bağımsız değişken olarak iletmeniz yeterlidir.
[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
//...
}];
Anonim Blok
Bu işlevsel olarak anonim bir bloktur, ancak değişkenlere blok atama sözdizimi basitçe değişkeni anonim bir bloğa eşit ayarlamaktır.
^return_type (var_type varName)
{
//...
};
typedef
Blok
Bu, blokların bildirimi sırasında herhangi bir sınıf adı gibi referans verilebilecek kısa bir ad ayarlamanızı sağlar.
typedef return_type (^blockName)(var_type);
Daha sonra blockName
standart blok bildirimi sözdizimi yerine kullanmak için, sadece değiştirin.
Satır İçi Blok
Bu muhtemelen blokların daha az kullanışlı bir kullanımıdır, ancak yine de yerini alabilir. Satır içi bir blok, somutlaştırıldıktan hemen sonra çağrılan anonim bir bloktur.
^return_type (var_type varName)
{
//...
}(var);
Satır içi bloklar öncelikle kapsam dengelemesi için kullanışlıdır ve kabaca küme sınırlaması olan basit kod parçalarına kabaca eşdeğerdir.
{
//...
}
Özyinelemeli Bloklar
Bu, geri aramalar ve GCD çağrıları sırasında kullanılabilecek bir döngü oluşturarak, kendisinden bir blok çağırmanıza izin verir. Bu örnekleme yönteminde ARC'de tutma döngüleri yoktur.
__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
if (returnCondition)
{
blockName = nil;
return;
}
// ...
} copy];
blockName(varValue);
Dönen Bloklar
Bir yöntem bir bloğu döndürebilir,
- (return_type(^)(var_type))methodName
{
// ...
}
biraz garip ise, bir fonksiyon gibi.
return_type (^FunctionName())(var_type)
{
// ...
}
Ekler
Bir şey kaçırdıysam, lütfen yorumlarda bana bildirin, ben de araştırırım / ekleyeceğim
Ah, ve Swift'te ...
blockName = (varName: var_type) -> (return_type)
Neredeyse bir dil özelliği gibi.