web-dev-qa-db-fra.com

NSAttributedStringKey donnant une erreur d'identificateur non résolue

Je suis un tutoriel en ligne pour créer une application iOS de type magazine. J'essaie d'utiliser NSAttributedStringKey mais je reçois toujours l'erreur ci-dessous. Des idées?

C'est la ligne de code qui cause l'erreur:

let attrs = [NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: font] as [NSAttributedStringKey : Any]
16
Johnm95

Les projets sont probablement dans différentes versions de Swift.

Dans Swift 4, NSFontAttributeName a été remplacé par NSAttributedStringKey.font .

comme indiqué ici NSFontAttributeName vs NSAttributedStringKey.font

Besoin de confirmer si cela fonctionnera sur les versions inférieures à ios11

32
Tibin Thomas

Vous essayez d'utiliser une API iOS 11 sur une version antérieure à iOS 11 (probablement iOS 10). Surpris que vous ayez trouvé un tutoriel utilisant déjà les fonctionnalités bêta!

En attendant, essayez ceci.

let attrs = [NSForegroundColorAttributeName: color, NSFontAttributeName: font]

et ça devrait marcher.

20
chrismanderson

Le code que vous essayez d'utiliser est une nouvelle API ajoutée à iOS 11. Puisque vous utilisez Xcode 8, vous n'utilisez pas iOS 11. Vous devez donc utiliser l'API actuelle (non-bêta).

let attrs = [NSForegroundColorAttributeName: color, NSFontAttributeName: font]
7
rmaddy

Modifications de Swift 4.1 et Xcode 9.3 Valeur de clé attribuée.

let strName = "Hello Stackoverflow"
let string_to_color2 = "Hello"        
let attributedString1 = NSMutableAttributedString(string:strName)
let range2 = (strName as NSString).range(of: string_to_color2)       
attributedString1.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red , range: range2)
lblTest.attributedText = attributedString1

Bonjour sera de couleur rouge.

6
Gautam Sareriya

Cet exemple ne fonctionne que sur iOS11.

import UIKit

class VC: UIViewController { 

    @IBOutlet weak var usernameTxt: UITextField!
    @IBOutlet weak var emailTxt: UITextField!
    @IBOutlet weak var passTxt: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        setupView()
    }

    func setupView() {
        usernameTxt.attributedPlaceholder = NSAttributedString(string: "username", attributes: [NSAttributedStringKey.foregroundColor: smackPurplePlaceholder])
        emailTxt.attributedPlaceholder = NSAttributedString(string: "email", attributes: [NSAttributedStringKey.foregroundColor: smackPurplePlaceholder])
        passTxt.attributedPlaceholder = NSAttributedString(string: "password", attributes: [NSAttributedStringKey.foregroundColor: smackPurplePlaceholder])  
    }    
}
3
Durul Dalkanat