Использование необъявленного типа «AttributedString»

Xcode 8 beta 4 больше не распознает класс Foundation AttributedString.

Я воспроизвел это в этом простом примере с игровой площадкой:

//: Playground - noun: a place where people can play

import Foundation

let attrStr1 = NSAttributedString()
let attrStr2 = AttributedString()  // Use of undeclared type 'AttributedString'

Поскольку AttributedString был доступен в более старых бета-версиях Xcode 8 Swift 3, я полагаю, что это ошибка Foundation, которую необходимо исправить, а не какая-то ошибка исходного кода в Playground?


person Community    schedule 02.08.2016    source источник
comment
Я не думаю, что это ошибка. Я думаю, они отменили изменение именования с NSAttributeString->AttributedString обратно, чтобы использовать префикс. Предположительно, чтобы сохранить префикс NS в Foundation. В целом, в бета-версии 4 изменений в именах гораздо больше, чем я ожидал. Большинство из них очевидны, некоторые сложнее.   -  person Matt Weinecke    schedule 02.08.2016
comment
@MattWeinecke и @PetahChristian: интересное отличие от Apple, если это правда. Однако я не могу найти упоминания об этом в примечаниях к выпуску Xcode 8 Beta 4. Я бы лично приветствовал возвращение префикса NS. Поскольку сейчас нужно помнить слишком много вещей: Data — это структура, а NSData — это класс; то же самое с URL и т. д.   -  person Code Different    schedule 02.08.2016
comment
Например, я подумал, что это странно, что AttributedString отбросил префикс, но не NSMutableAttributedString.   -  person Matt Weinecke    schedule 02.08.2016
comment
Я тестировал здесь, и вам нужно использовать NSAttributedString. Мой проект даже не компилируется с AttributedString.   -  person Leo Dabus    schedule 02.08.2016
comment
Нашел причину, описанную в SE-0086 @LeoDabus.   -  person    schedule 02.08.2016


Ответы (1)


Хотя это не задокументировано в примечаниях к выпуску Xcode, обновление версии 2 для предложения по эволюции Swift SE-0086 Drop NS Prefix in Swift Foundation добавил префикс "NS" обратно к нескольким классам Foundation, которые ранее удалили префикс.

Причина в следующем:

Если в ближайшем будущем у класса планируется создать эквивалент типа значения, сохраните префикс NS. Примеры: NSAttributedString, NSRegularExpression, NSPredicate.

Таким образом, тип Swift AttributedString вернется в некоторую точку в следующий раз как структура, а не как класс.

Похоже, что некоторые из этих улучшений станут «основной областью для Swift 4». На данный момент необходимо вернуться к использованию класса NSAttributedString.

Если вам интересно узнать, сколько типов было затронуто обновлением SE-0086 v2, это выглядит так: >revision затрагивает ~32 типа, в которых ранее был удален префикс NS для Swift 3.

person Community    schedule 02.08.2016