Frage zu if Statement in Verbindung zur .textColor

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Frage zu if Statement in Verbindung zur .textColor

    Hallo zusammen,

    bin gerade dabei per Code diverse Cells zu erstellen. Dabei möchte ich, dass der Text eines Labels abhängig vom Inhalt des Textes gefärbt wird.
    Habe bisher das hier erstellt, leider wird jedoch eine Fehlermeldung angezeigt wenn ich die Funktion dann der .textColor zuordnen möchte:

    Quellcode

    1. let descriptionLabel: UILabel = {
    2. let dLabel = UILabel()
    3. dLabel.textColor = textColor()
    4. dLabel.font = UIFont.systemFont(ofSize: 16)
    5. dLabel.text = "Sample text"
    6. return dLabel
    7. }()
    8. func textColor() {
    9. if descriptionLabel.text == "New" {
    10. descriptionLabel.textColor = .green
    11. }else if descriptionLabel.text == "Werbung" {
    12. descriptionLabel.textColor = .red
    13. }else{
    14. descriptionLabel.textColor = .lightGray
    15. }
    16. }
    Alles anzeigen
    Wenn ihr mehr Code braucht kann ich noch was nachreichen.

    Vielen Dank für eure Hilfe!
    Tom
  • Damit das funktioniert, müsste Deine Funktion auch eine Farbe zurückgeben ... wie sollte sie sonst in der Zuweisung verwendet werden? Also weise in der Funktion dem Label-Text keine Farbe zu, sondern liefere sie als Rückgabewert. Und wenn Du schon dabei bist, würde ich - im Sinne einer Kapselung - den Label-Text als Parameter übergeben (woher kommt eigentlich descriptionLabel in der Funktion)...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Also wenn ich das soweit richtig verstanden habe quasi so ändern:

    Quellcode

    1. func textColor() {
    2. var color: UIColor
    3. color = UIColor()
    4. if descriptionLabel.text == "New" {
    5. color = .green
    6. }else if descriptionLabel.text == "Werbung" {
    7. color = .red
    8. }else{
    9. color = .lightGray
    10. }
    11. return color
    12. }
    Alles anzeigen
    Muss man das Label der Funktion ebenfalls zuordnen? Dachte, da es sich in der selben .swift-Datei befindet kennt die Funktion das zuvor erstellte Label ?(

    Tom
  • Im Prinzip ja. Ich hätte allerdings eine Funktion geschrieben, die einen Text übergeben bekommt und anhand dessen Inhalts eine Farbe als Rückgabeobjekt liefert ... ohne Kenntnis von einer Variablen zu haben, die außerhalb der Funktion deklariert wurde. Kapselung eben.

    Oder ist das mit Swift aus der Mode gekommen und man nutzt mehr Variablen aus dem übergeordneten Scopes?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Soweit ich da für mich antworte, kann ich nur sagen, dass ich mit Mühe und Not versuche da irgendwas zusammenzukleistern...kann also durchaus an meiner Arbeitsweise liegen 8) Bin bis jetzt ganz froh, dass der Rest funktioniert.

    Bei der neuen Funktion kommt erneut eine Fehlermeldung "Unexpected non-void return value in void function" ;(

    Tom
  • Dann gehen mir langsam die Ideen aus, habe es gerade so umgebaut, dass die Funktion die .farbe als String ausgibt und einsetzt, aber auch hier kommt bei der Erstellung des Labels dann eine Fehlermeldung ?(

    Quellcode

    1. let descriptionLabel: UILabel = {
    2. let dLabel = UILabel()
    3. dLabel.textColor = textColor()
    4. dLabel.font = UIFont.systemFont(ofSize: 16)
    5. dLabel.text = "Sample text"
    6. return dLabel
    7. }()
    8. func textColor(farbe: String) {
    9. var color: String
    10. if descriptionLabel.text == "New" {
    11. color = ".green"
    12. }else if descriptionLabel.text == "Werbung" {
    13. color = ".red"
    14. }else{
    15. color = ".lightGray"
    16. }
    17. return textColor(farbe: "\(color)")
    18. }
    Alles anzeigen
    //Edit: Aha... :) Sieht das besser aus?

    Quellcode

    1. func textColor(farbe: UIColor) {
    2. var color: UIColor
    3. color = UIColor()
    4. if descriptionLabel.text == "New" {
    5. color = .green
    6. }else if descriptionLabel.text == "Werbung" {
    7. color = .red
    8. }else{
    9. color = .lightGray
    10. }
    11. return textColor(farbe: color)
    12. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tom16092 ()

  • Okay, das macht Sinn. Danke!
    Habe die Funktion dementsprechend umgebaut und den Text in Abhängigkeit vom Label gesetzt. Der Wert für das Label wird in einer anderen Datei festgelegt.

    Quellcode

    1. func textColor(text: String) -> UIColor {
    2. var color = UIColor()
    3. var text = newsLabel.text
    4. if text == "New" {
    5. color = .green
    6. }else if text == "Werbung" {
    7. color = .red
    8. }else{
    9. color = .lightGray
    10. }
    11. return color
    12. }
    Alles anzeigen

    Für den Rückgabewert habe ich mir hier color liefern lassen, da ich die Farbe ja weiterhin benutzen möchte.

    Muss ich color jetzt im Label eintragen oder die Funktion? So:

    Quellcode

    1. let newsLabel: UILabel = {
    2. let label = UILabel()
    3. label.textColor = textColor(text: "\(newsLabel.text)")
    4. label.font = UIFont.systemFont(ofSize: 10)
    5. label.text = "Sample text"
    6. return label
    7. }()

    Tom

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tom16092 ()