Mevcut swift sınıfımdan bir kategori oluşturmak istiyorum, ancak IDE'de bunu yapma seçeneği yok.
Swift projesinde kategori olup olmadığına dair bir fikriniz var mı? Veya hızlı projede benzer işlevsellik nasıl elde edilir?
Yanıtlar:
Swift'de, Extensions
mevcut sınıflara, yapılara ve numaralandırma türlerine yeni işlevler eklemek için kullanabilirsiniz .
Amaç-C kategorilerinden birkaç yönden farklılık gösterirler, özellikle:
Bugünkü haliyle, Uzantılar şunları yapabilir:
Bir uzantıyı bildirmek için temel sözdizimi aşağıdaki gibidir:
extension SomeType {
// new functionality to add to SomeType goes here
}
Kontrol Apple'ın belgelerine Swift Uzantılar'ı nasıl kullanılacağı konusunda daha fazla bilgi için.
Amaç C'de bunlara kategoriler denirdi , ancak Swift'de bunlara uzantılar denir . Her ikisinin de amacı, alt sınıflar oluşturmak zorunda kalmadan mevcut sınıflara ek işlevsellik sağlamaktır.
Belgelerde uzantılar hakkında bir şeyler okudum, ancak bu eğitim videosunu ( YouTube sürümü , github kaynağı ) izleyene kadar projemde nasıl kullanılacağını gerçekten anlamadım .
İşte bunun nasıl yapılacağına dair videodan alınan bir özet.
Proje Gezgini'ne sağ tıklayın ve "Yeni Dosya ..." seçeneğini seçin.
"Swift Dosyası" nı seçin
Kural, dosya adını genişletmekte olduğunuz sınıf adı artı ("+" işaretiyle) ona yaptığınız şeyi kaydetmektir. Örneğin, "UIImage + Kırpma".
Yeni oluşturduğunuz yeni Swift dosyasını açın.
İçe olmalıdır UIKit
(yerine Foundation
bir uzatıyoruz ise) UIView
. Ardından extension
, uzatmak istediğiniz sınıf adından önce anahtar kelimeyi kullanın . Daha sonra sınıfa kendi yeni yöntemlerinizi ekleyebilirsiniz. (Not, uzantılar yeni yöntemler eklemek içindir, mevcut yöntemleri geçersiz kılmak için değildir - dolayısıyla adı.)
Videoda örnek, görüntüden bir daire kesen ve ona bir kenarlık veren bir yöntem eklemekti.
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
Tam örnek için buraya bakın .
Artık, standart sınıfın bir parçası olduğu gibi, bu sınıf için yeni yönteminizi kodunuzun herhangi bir yerinde kullanabilirsiniz.
İşte videonun örneği ( github'da ):
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView = nil
override func viewDidLoad() {
super.viewDidLoad()
let img = imageView.image
imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
}
}
Yöntem cropToCircleWithBorderColor
standart bir parçası değil UIImage
ama gördüğünüz gibi tıpkı olduğu gibi kullanılıyor.
Swift'de buna Uzantılar deniyor ! Bunu kontrol et
extension
, her şeyi tamamen farklı kılan değişkenleri içeremez.
Mevcut sınıfınızda aşağıdaki kodu kullanabilirsiniz
extension name{
func funcName(){
}
}
extension
.