Ne kadar Hızlı @autoclosure kullanmak
İlk değer olarak yazılan Swift assert
yazarken fark ettim
@autoclosure() -> Bool
T
genel bir değer, LogicValue
protocol
üzerinden varlığını test etmek için geri dönmek için aşırı bir yöntem ile.
Ancak yapışmasını kesinlikle eldeki soruya. Döndüren @autoclosure
Bool
istiyor gibi.
Herhangi bir parametre ve bir Bool çalışmıyor döndüren gerçek bir kapatma yazma, beni derleme yapmak için kapanması gibi aramak istiyor:
assert({() -> Bool in return false}(), "No user has been set", file: __FILE__, line: __LINE__)
Ancak bir Bool çalışıyor sadece geçen:
assert(false, "No user has been set", file: __FILE__, line: __LINE__)
Neler oluyor? @autoclosure
nedir?
Düzenleme:@auto_closure
@autoclosure
yeniden adlandırıldı
CEVAP
Bir bağımsız değişken, argüman alır basit bir kapanması gereken bir işlevi göz önünde bulundurun:
func f(pred: () -> Bool) {
if pred() {
println("It's true")
}
}
Bu işlev çağrısı, bir kapatma geçmek zorundayız
f({2 > 1})
// "It's true"
Eğer parantezler ihmal varsa, bir ifade geçiyoruz ve bu bir hata
f(2 > 1)
// error: could not find an overload for '>' that accepts the supplied arguments
@autoclosure
ifade otomatik bir kapatma oluşturur. Yani arayan 2 > 1
gibi bir ifade yazdığında otomatik olarak f
geçirilmeden önce {2 > 1}
olmak için bir kapatma içine sarılmış. Eğer uygularsak işlevi bu 26**:
func f(pred: @autoclosure () -> Bool) {
if pred() {
println("It's true")
}
}
f(2 > 1)
// It's true
Bir kapatma sarın gerek kalmadan sadece bir ifade ile çalışır.
GÜNCELLEME: cevap önceki bir sürümü de otomatik closured açık kapatılması (f({2 > 1})
gibi) işlevi çağrısı olabileceğini dile getirdi. Bu çok yanlış bir şeydi. @Sayesinde JackyBoy ve @ole-begemann.
Ne kadar hızlı bir arka plan iş parçac...
Ne kadar Hızlı bir dizi karışık mı?...
Ne kadar Hızlı komut satırı argümanlar...
Ne kadar Hızlı bir isim kullanıyor mus...
Neden bu kadar inanılmaz derecede hızl...