Ich habe eine Struktur und ich würde gerne wissen, ob ich Variablen mit Klammer-Syntax zugreifen kann. Hier ist meine Struktur:Kann man in Swift eine Zeichenfolge verwenden, um auf eine Struktureigenschaft zuzugreifen?
import UIKit
public struct Pixel {
public var value: UInt32
public var red: UInt8
public var green: UInt8
public var blue: UInt8
public var alpha: UInt8
}
public struct RGBAImage {
public var pixels: [ImageProcessor_Sources.Pixel]
public var width: Int
public var height: Int
public init?(image: UIImage)
public func toUIImage() -> UIImage?
}
Ich mag die Variable zugreifen wie so pixel["red"]
, im Gegensatz zu pixel.red
var image = RGBAImage(image: image!)!
var pixel = image.pixels[index]
pixel["red"] = 255 // as opposed to pixel.red
Gibt es eine Möglichkeit, dies in Swift zu tun?
Nein, können Sie nicht (es sei denn, Sie erstellen ein Wörterbuch für die Komponenten oder eine benutzerdefinierte Abonnementlogik). Was ist der Vorteil des Zeichenketten-Abonnements? Literale Strings sind immer fehleranfällig. – vadian
was passiert im Falle von Pixel ["aosiubd"] '? – luk2302
Nun, ich versuche die Dinge trocken zu halten. Ich stimme zu, dass die Dinge fehleranfälliger sein werden, aber ich würde gerne in der Lage sein, einen String in eine Funktion zu übergeben und diese als Lookup zu verwenden, ähnlich einem Python-Wörterbuchschlüssel. Ich muss nun dieses Stück Code für die ROTEN, GRÜNEN und BLAUEN Kanäle schreiben: 'pixel.red = UInt8 (max (0, min (255, rgbArray [0] + diff * intensity))) ' –