Dies ist das erwartete Ergebnis. Wenn die Länge einer Zeichenfolge 0 ist (der Fall für ""), hat sie kein Zeichen bei Index 0. Wenn Sie also versuchen, mit s.attributes auf sie zuzugreifen, wird erwartet, dass Sie eine Ausnahmebedingung erhalten.
Da die Indizierung von 0 aus beginnt, ist index = 0 nur für String.length> 0 vorhanden.
Sie können dies leicht überprüfen, indem Sie eine Zeichenfolge der Länge 1 verwenden und 1 an s.attributes eingeben.
let s = NSAttributedString(string: "a", attributes: [NSForegroundColorAttributeName: UIColor.red])
let range = NSMakeRange(0, s.length)
let attrs = s.attributes(at: 1, longestEffectiveRange: nil, in: range) //also produces out of bounds error
Es stürzt auch in Objective-C. Überprüfen Sie vor 'if s.string.isEmpty'? – Larme
@Larme, das ist, wie ich das gelöst habe, aber ich würde gerne wissen, warum das passiert – Kubba