NSFormatter
NSFormatter
абстрактный класс, объявляющий интерфейс для объектов, создающих, интерпретирующих и проверяющих текстовое представление содержания ячейки. Платформа Основы обеспечивает два конкретных подкласса NSFormatter
генерировать эти объекты: NSNumberFormatter
и NSDateFormatter
.
Разделение на подклассы примечаний
NSFormatter
предназначается для разделения на подклассы. Пользовательское средство форматирования может ограничить ввод и улучшить дисплей данных новыми способами. Например, у Вас могло быть пользовательское средство форматирования, гарантирующее, чтобы порядковые номера, введенные пользователем, соответствовали предопределенным форматам. Прежде чем Вы решите создать пользовательское средство форматирования, удостоверьтесь, что Вы не можете сконфигурировать общедоступные подклассы NSDateFormatter
и NSNumberFormatter
удовлетворить Ваши требования.
Для получения инструкций по тому, как создать Ваше собственное средство форматирования, посмотрите Создание Пользовательского Средства форматирования.
Наследование
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSCopying
-
NSObjectProtocol
-
Печатаемый
-
NSCoding
-
NSCopying
-
NSObject
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.0 и позже.
-
Реализация по умолчанию этого метода повышает исключение.
Объявление
Swift
func stringForObjectValue(_
anObject
: AnyObject) -> String?Objective C
- (NSString *)stringForObjectValue:(id)
anObject
Параметры
anObject
Объект, для которого возвращается текстовое представление.
Возвращаемое значение
NSString
возразите, что дословно представляетobject
для дисплея. Возвратыnil
еслиobject
не имеет корректного класса.Обсуждение
При реализации подкласса возвратитесь
NSString
возразите, что дословно представляет объект ячейки для дисплея и — еслиeditingStringForObjectValue:
не реализован — для редактирования. Сначала протестируйте переданный - в объекте видеть, имеет ли это корректный класс. Если это не, возвратитьсяnil
; но если это имеет правильный класс, возвратитесь должным образом отформатированный и, при необходимости, локализованная строка. (См. спецификациюNSString
класс для форматирования и локализации подробных данных.)Следующая реализация (который соединяется с
getObjectValue:forString:errorDescription:
пример выше) префиксы двухразрядное представление плавающее со знаком доллара:- (NSString *)stringForObjectValue:(id)anObject {
if (![anObject isKindOfClass:[NSNumber class]]) {
return nil;
}
return [NSString stringWithFormat:@"$%.2f", [anObject floatValue]];
}
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
attributedStringForObjectValue (_: withDefaultAttributes:) - attributedStringForObjectValue:withDefaultAttributes:
Возвраты реализации по умолчанию
nil
указать, что объект средства форматирования не обеспечивает приписанную строку.Объявление
Swift
func attributedStringForObjectValue(_
anObject
: AnyObject, withDefaultAttributesattributes
: [NSObject : AnyObject]?) -> NSAttributedString?Objective C
- (NSAttributedString *)attributedStringForObjectValue:(id)
anObject
withDefaultAttributes:(NSDictionary *)attributes
Параметры
anObject
Объект, для которого возвращается текстовое представление.
attributes
Атрибуты по умолчанию для использования для возвращенной приписанной строки.
Возвращаемое значение
Представляющая приписанная строка
anObject
.Обсуждение
При реализации подкласса возвратитесь
NSAttributedString
возразите, должна ли строка для дисплея иметь некоторые атрибуты. Например, Вы могли бы хотеть, чтобы отрицательные величины в финансовом приложении появились в красном тексте. Вызовите свою реализациюstringForObjectValue:
для получения неприписанной строки затем создайтеNSAttributedString
объект с ним (см.initWithString:
). Используйтеattributes
словарь по умолчанию для сброса атрибутов строки, когда изменение в значении гарантирует его (например, отрицательная величина становится положительной) для получения информации о создании приписанных строк, видит Приписанное Строковое Руководство по программированию.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
Реализация по умолчанию этого метода вызывает
stringForObjectValue:
.Объявление
Swift
func editingStringForObjectValue(_
anObject
: AnyObject) -> StringObjective C
- (NSString *)editingStringForObjectValue:(id)
anObject
Параметры
anObject
Объект, для которого можно возвратить строку редактирования.
Возвращаемое значение
NSString
объект, использующийся для редактирования текстового представленияanObject
.Обсуждение
При реализации подкласса переопределите этот метод только, когда строка, которую пользователи видят и строка, которую они редактируют, отличается. В Вашей реализации возвратитесь
NSString
объект, использующийся для редактирования, после логики, рекомендуемой для реализацииstringForObjectValue:
. Если Вы хотите знаки доллара в выведенных на экран строках, удаленных для редактирования, как пример, Вы реализовали бы этот метод.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Реализация по умолчанию этого метода повышает исключение.
Объявление
Параметры
anObject
Если преобразование успешно, по возврату содержит объект, создаваемый из
string
.string
Строка для парсинга.
error
Если не -
nil
, если существует ошибка во время преобразования, по возврату содержитNSString
объект, описывающий проблему.Возвращаемое значение
YES
true
если преобразование от строки до объекта содержания ячейки было успешно, иначеNO
false
.Обсуждение
При реализации подкласса возвратите ссылкой объект
anObject
после создания его отstring
. ВозвратитьсяYES
true
если преобразование успешно. Если Вы возвращаетесьNO
false
, также возвратитесь косвенно (вerror
) локализованное презентабельное пользователемNSString
объект, объясняющий причину, почему преобразование перестало работать; делегат (если таковые имеются)NSControl
объект, управляющий ячейкой, может тогда реагировать на отказ вcontrol:didFailToFormatString:errorDescription:
. Однако, еслиerror
nil
, отправитель не интересуется описанием ошибки, и Вы не должны пытаться присвоить тот.Следующий пример (который соединяется с поданным примером
stringForObjectValue:
) преобразовывает строковое представление суммы в долларах, включающей знак доллара; это используетNSScanner
экземпляр для преобразования этой суммы в плавание после снятия начального знака доллара.- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error {
float floatResult;
NSScanner *scanner;
BOOL returnValue = NO;
scanner = [NSScanner scannerWithString: string];
[scanner scanString: @"$" intoString: NULL]; //ignore return value
if ([scanner scanFloat:&floatResult] && ([scanner isAtEnd])) {
returnValue = YES;
if (obj)
*obj = [NSNumber numberWithFloat:floatResult];
} else {
if (error)
*error = NSLocalizedString(@"Couldn’t convert to float", @"Error converting");
}
return returnValue;
}
Специальные замечания
До OS X v10.6, реализация этого метода в обоих
NSNumberFormatter
иNSDateFormatter
возвратился быYES
true
и объектное значение, даже если только могла бы быть проанализирована часть строки. Это проблематично, потому что Вы не можете быть уверены, какая часть строки была проанализирована. Если часть строки не может быть проанализирована, для приложений, соединенных на или после OS X v10.6, этот метод вместо этого возвращает ошибку. Можно использоватьgetObjectValue:forString:range:error:
для получения старого поведения — это возвращает диапазон успешно проанализированной подстроки.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
isPartialStringValid (_: newEditingString:errorDescription:) - isPartialStringValid:newEditingString:errorDescription:
Возвращает булево значение, указывающее, допустима ли частичная строка.
Объявление
Параметры
partialString
Текст в настоящее время в ячейке.
newString
Если
partialString
потребности, которые будут изменены по возврату, содержит замещающую строку.error
Если не -
nil
, если сбои проверки содержатNSString
объект, описывающий проблему.Возвращаемое значение
YES
true
еслиpartialString
приемлемое значение, иначеNO
false
.Обсуждение
Этот метод вызывается каждый раз, когда пользователь нажимает клавишу, в то время как ячейка имеет клавиатурный фокус — это позволяет Вам проверить и отредактировать текст ячейки, поскольку пользователь вводит его.
В реализации подкласса оценить
partialString
согласно контексту, отредактируйте текст при необходимости и возврат ссылкой любая отредактированная строка вnewString
. ВозвратитьсяYES
true
еслиpartialString
приемлемо иNO
false
еслиpartialString
недопустимо. Если Вы возвращаетесьNO
false
иnewString
nil
, дисплеи ячейкиpartialString
минус введенный последний знак. Если Вы возвращаетесьNO
false
, можно также возвратиться косвенноNSString
объект (вerror
) это объясняет причину, почему проверка перестала работать; делегат (если таковые имеются)NSControl
объект, управляющий ячейкой, может тогда реагировать на отказ вcontrol:didFailToValidatePartialString:errorDescription:
. Если замена произойдет, диапазон выбора будет всегда устанавливаться до конца текста.Этот метод является методом совместимости. Если подкласс переопределяет этот метод и не переопределяет
isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:
, как этот метод вызовут прежде (isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:
просто вызовы этот по умолчанию).Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
isPartialStringValid (_: proposedSelectedRange:originalString:originalSelectedRange:errorDescription:) - isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:
Этот метод должен быть реализован в подклассах, хотящих проверить пользовательские изменения в строке в поле, где пользователь изменяется, не обязательно в конце строки и сохраняют выбор (или устанавливают различный, такой как выбор ошибочной части строки пользователь ввел).
Объявление
Swift
func isPartialStringValid(_
partialStringPtr
: AutoreleasingUnsafeMutablePointer<NSString?>, proposedSelectedRangeproposedSelRangePtr
: NSRangePointer, originalStringorigString
: String, originalSelectedRangeorigSelRange
: NSRange, errorDescriptionerror
: AutoreleasingUnsafeMutablePointer<NSString?>) -> BoolObjective C
- (BOOL)isPartialStringValid:(NSString **)
partialStringPtr
proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
originalString:(NSString *)origString
originalSelectedRange:(NSRange)origSelRange
errorDescription:(NSString **)error
Параметры
partialStringPtr
Новая строка для проверки.
proposedSelRangePtr
Диапазон выбора, который будет использоваться, если строка будет принята или заменена.
origString
Исходная строка, перед предложенным изменением.
origSelRange
Выбор передвигается, по которому должно иметь место изменение.
error
Если не -
nil
, если сбои проверки содержатNSString
объект, описывающий проблему.Возвращаемое значение
YES
true
еслиpartialStringPtr
приемлемо, иначеNO
false
.Обсуждение
В реализации подкласса оценить
partialString
согласно контексту. ВозвратитьсяYES
true
еслиpartialStringPtr
приемлемо иNO
false
еслиpartialStringPtr
недопустимо. Присвойте новую строкуpartialStringPtr
и новый диапазон кproposedSelRangePtr
и возвратитесьNO
false
если Вы хотите заменить строку и изменить диапазон выбора. Если Вы возвращаетесьNO
false
, можно также возвратиться косвенноNSString
объект (вerror
) это объясняет причину, почему проверка перестала работать; делегат (если таковые имеются)NSControl
объект, управляющий ячейкой, может тогда реагировать на отказ вcontrol:didFailToValidatePartialString:errorDescription:
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Указывает ширину модуля, определяя текстовое представление.
Объявление
Swift
enum NSFormattingUnitStyle : Int { case Short case Medium case Long }
Objective C
enum { NSFormattingUnitStyleShort = 1, NSFormattingUnitStyleMedium, NSFormattingUnitStyleLong, }; typedef NSUInteger NSFormattingUnitStyle;
Константы
-
Short
NSFormattingUnitStyleShort
Указывает короткую ширину.
Соответствующее значение
NSInteger
, равный1
.Доступный в OS X v10.10 и позже.
-
Medium
NSFormattingUnitStyleMedium
Указывает среднюю ширину.
Соответствующее значение
NSInteger
, равный2
.Доступный в OS X v10.10 и позже.
-
Long
NSFormattingUnitStyleLong
Указывает долгую ширину.
Соответствующее значение
NSInteger
, равный3
.Доступный в OS X v10.10 и позже.
Обсуждение
Модуль представлен в самой короткой доступной нотации. Например, для английского языка, при форматировании «3 фунтов»: NSFormattingUnitStyleLong составляет «3 фунта»; NSFormattingUnitStyleMedium составляет «3 фунта»; NSFormattingUnitStyleShort «3#».
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
-
Указывает контекст капитализации.
Объявление
Swift
enum NSFormattingContext : Int { case Unknown case Dynamic case Standalone case ListItem case BeginningOfSentence case MiddleOfSentence }
Objective C
enum { NSFormattingContextUnknown = 0, NSFormattingContextDynamic = 1, NSFormattingContextStandalone = 2, NSFormattingContextListItem = 3, NSFormattingContextBeginningOfSentence = 4, NSFormattingContextMiddleOfSentence = 5, }; typedef NSUInteger NSFormattingContext;
Константы
-
Unknown
NSFormattingContextUnknown
Указывает, что контекст капитализации, который будет использоваться, неизвестен.
Это - значение по умолчанию. Соответствующее значение
NSInteger
, равный0
.Доступный в OS X v10.10 и позже.
-
Dynamic
NSFormattingContextDynamic
Указывает неопределенный формат.
Контекст капитализации определяется динамично от набора {
NSFormattingContextStandalone
,NSFormattingContextBeginningOfSentence
,NSFormattingContextMiddleOfSentence
}.Когда строковый прокси используется в
stringWithFormat:
, средство форматирования возвращает строковый прокси для универсальной строки и затем форматирует строковое использованиеNSFormattingContextUnknown
. Средство форматирования получает контекст из расположения универсальной строки и затем форматирует строку соответственно.Соответствующее значение
NSInteger
, равный1
.Доступный в OS X v10.10 и позже.
-
Standalone
NSFormattingContextStandalone
Указывает форматирование в течение начала предложения.
Контекст капитализации, если символ даты или даты должен быть отформатирован с капитализацией, подходящей для автономного использования, такого как изолированное имя на странице календаря.
Соответствующее значение
NSInteger
, равный2
.Доступный в OS X v10.10 и позже.
-
ListItem
NSFormattingContextListItem
Указывает форматирование для списка или меню.
Контекст капитализации, если символ даты или даты должен быть отформатирован с капитализацией, подходящей для списка или пункта меню.
Соответствующее значение
NSInteger
, равный3
.Доступный в OS X v10.10 и позже.
-
BeginningOfSentence
NSFormattingContextBeginningOfSentence
Указывает форматирование в течение начала предложения.
Контекст капитализации, если символ даты или даты должен быть отформатирован с капитализацией, надлежащей в течение начала предложения.
Соответствующее значение
NSInteger
, равный4
.Доступный в OS X v10.10 и позже.
-
MiddleOfSentence
NSFormattingContextMiddleOfSentence
Указывает форматирование в течение середины предложения.
Контекст капитализации, если символ даты или даты должен быть отформатирован с капитализацией, надлежащей в течение середины предложения.
Соответствующее значение
NSInteger
, равный5
.Доступный в OS X v10.10 и позже.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-