Eğerjenerik Swift uzantısına tipinde Geçiş veya ideal olarak bu
class Fancy:UIView
tüm kardeş Fancy
görüşlerini bulmak istiyorum olduğunu varsayalım anlaması. No problem ...
for v:UIView in superview!.subviews
{
if let f = v as? Fancy
{ f.hungry = false }
}
Yani, bir uzantısı deneyin Müthiş
public extension UIView
{
internal func fancySiblings()->([Fancy])
{
return (self.superview!
.subviews
.filter { $0 != self }
.flatMap { $0 as? Fancy }
)
}
}
, artık
for f:Fancy in self.fancySiblings()
{ f.hungry = false }
Fantastik.
Ama
Nasıl herhangi UIView alt tipi ile çalışmak için bu uzantıyı genellemek?İdeal olarak, uzantısı, türünü bile alabilir mi? Bir tür almanın yanı sıra? Kullanmak türü genel bir uzantısı "anlatmak" nasıl Yani
, gibi bir şey ...
public extension UIView
{
internal func siblings<T>(something T)->([T])
{
return (self.superview!
.subviews
.filter { $0 != self }
.flatMap { $0 as? T }
)
}
ve sonra böyle bir şey diyebiliriz ...
for f in self.siblings(Fancy)
for p in self.siblings(Prancy)
for b in self.siblings(UIButton)
, bunun gibi??
O size "Tersten anlaması" olabilir şaşırtıcı ama diğer şekilde çalışmıyor
public extension UIView
{
internal func incredible<T>()->([T])
{
return (self.superview!
.subviews
.filter { $0 != self }
.flatMap { $0 as? T }
)
}
for f:Fancy in self.incredible()
for p:Prancy in self.incredible()
görünüyor. Hatta ...
self.siblings().forEach{
(f:Fancy) in
d.hasRingOn = false
}
Yani ben hala istiyorum yapabilirsiniz
bile ayrıca bunu anlaması, ideal olarak, for f in self.siblings(Fancy)
gibi bir tür şeye "geçmek" ve nasıl bilmek.
Benzer soru: http://stackoverflow.com/questions/37216240/generic-function-taking-a-type-name-in-swift (Sorunuzu yanıtlayamadığını düşünüyorsanız, sorun değil - aynı temel sorun). – Hamish