'daki yapı özelliklerini tanımlamak için işlevi kullanın. Swift'i çok sayıda yapı oluşturmak için kullanıyorum; bunların tümü çoğunlukla aynı kalıptan oluşuyor. Her bir yapı, alıcılar ve ayarlayıcılarla bir dizi hesaplanmış özellik içerir; her bir yapı tipi arasındaki tek fark, hesaplanan özelliklerin sayısı ve her birinin adı ve türüdir. Örneğin, Şimdi Swift
struct Employee
{
var title: String
{
get { /*...*/ return someDict["title"] as! String }
set { /*...*/ }
}
var id: Int
{
get { /*...*/ return someDict["id"] as! Int }
set { /*...*/ }
}
var salary: Double
{
get { /*...*/ return someDict["salary"] as! Double }
set { /*...*/ }
}
}
struct Student
{
var name: String
{
get { /*...*/ return someDict["name"] as! String }
set { /*...*/ }
}
var gpa: Double
{
get { /*...*/ return someDict["gpa"] as! Double }
set { /*...*/ }
}
}
, Alıcı ve ayarlayıcıların her tek fark her bilgisayarlı özellik adının kodlanmış dize gösterimine ve türünün gönderme yaptığı olmak farklı yapılar arasında hemen hemen aynıdır .
Bu bir çeşit hantal ve tekrarlayıcıdır. Yapıya bakmak ve hangi özellikleri içerdiğini görmek ve tekrarlanan kodların çoğunu kullanmak zordur. Gerekli özelliklere sahip bir protokol oluşturmayı ve yapıda benimsemeyi düşündüğümden, en azından protokolün daha kolay okunabileceğini, ancak tekrarlanan kod sorununu çözmediğini düşündüm. Ne yapmak istiyorum
#define PROPERTY(NAME, TYPE) var NAME: TYPE { get{...} set{...} }
Daha sonra her yapı çok daha okunabilir olabilir ve, gibi çok daha az tekrarlanan kod olurdu, gibi bu özellikleri tanımlayan bir makro gibi bir şey tanımlamak olduğu
struct Employee
{
PROPERTY(title, String)
PROPERTY(id, Int)
PROPERTY(salary, Double)
}
struct Student
{
PROPERTY(name, String)
PROPERTY(gpa, Double)
}
Swift'de böyle bir şeyi yapmanın bir yolu var mı? Yoksa düşünmem gereken daha iyi bir yaklaşım var mı? Linux'ta çalıştığı kadar saf bir Swift çözümü istiyorum (eksik vakıf).
Kesinlikle bir önişlemci makro çözümü yoktur. Bu tür şantajlar Swift'den yok edildi. Değerli olan bir kod üreteci yazmaktır. – nhgrif
Sanırım sorununun yanlış çözümü ile geliyorsunuzdur. Eğer bu çok sayıda yapıya ihtiyacınız varsa alternatif bir çözüm önerebilirim. –
Bu kesinlikle doğru olduğunu düşünmüyorum @TobyAllen. İyi organize edilmiş bir model katmanında yanlış bir şey yok. Yine de, bu aslında bir XY problemi olabilir. – nhgrif