Быстрая замена .uppercaseString или .lowercaseString
Так как Strings в Swift больше не имеют доступных .uppercaseString или .lowercaseString, как бы я мог выполнить эту функцию?
Если у меня есть, например:
var sillyString = "This is a string!"
let yellyString = sillyString.uppercaseString
let silentString = sillyString.lowercaseString
Я хотел бы взять sillyString и изменить его как в верхнем, так и в нижнем регистре. Как мне теперь это делать?
Спасибо заранее!
Ответы
Ответ 1
Xcode 6.0/Swift 1.0
String
легко соединяется с NSString
, поэтому имеет свойства uppercaseString
и lowercaseString
, если вы import Foundation
(или действительно почти любая инфраструктура, поскольку они будут обычно import Foundation
внутри. Из раздела Строки и символы руководства по быстрому программированию:
Swifts Строковый тип легко соединяется с Foundations NSString класс. Если вы работаете с базой Foundation в Cocoa или Cocoa Нажмите, весь API NSString доступен для вызова любого Строковое значение, которое вы создаете, в дополнение к описанным выше функциям String в этой главе. Вы также можете использовать значение String с любым API, который требуется экземпляр NSString.
Xcode 6.1/Swift 1.1
Как отмечалось в @newacct, в Xcode 6.1/Swift 1.1, uppercaseString
и lowercaseString
находятся в классе Swift String
, поэтому вам не нужно использовать те, которые определены в NSString
. Однако он реализован как расширение класса String
в структуре Foundation
, поэтому решение остается тем же: import Foundation
На детской площадке:
import Foundation
var sillyString = "This is a string!" // --> This is a string!
let yellyString = sillyString.uppercaseString // --> THIS IS A STRING!
let silentString = sillyString.lowercaseString // --> this is a string!
Swift 3.0
На детской площадке:
import Foundation
var sillyString = "This is a string!" // --> This is a string!
let yellyString = sillyString.uppercased() // --> THIS IS A STRING!
let silentString = sillyString.lowercased() // --> this is a string!
Ответ 2
Свифт 4 и 5
TL; DR
Новые имена в Swift 3 используют постфикс -ed
чтобы указать, что -ed
uppercased()
и lowercased()
возвращают копию, а не измененный оригинал:
import Foundation
let title = "Castration: The Advantages and the Disadvantages" // Don't 'var' unless you have to!
title.uppercased() // "CASTRATION: THE ADVANTAGES AND THE DISADVANTAGES"
title.lowercased() // "castration: the advantages and the disadvantages"
title.capitalized // "Castration: The Advantages And The Disadvantages"
Несоответствия:.method() vs.property
Обратите внимание на странное расхождение, когда uppercased() и lowercased() являются функциями, а заглавные - свойством. Это похоже на недосмотр, и в этом случае, надеюсь, кто-то, кто доволен процессом быстрой эволюции, сделает исправление до того, как 3.0 выйдет из бета-версии.
Если вам известно, что вы работаете с NSString, есть свойство, доступное для всех трех:
NSString(string: "abcd").uppercased
NSString(string: "ABCD").lowercased
NSString(string: "abCd").capitalized
Язык сложен
Приведенные выше методы скрывают всю строку делегирования методов в NSString и CFString со стандартным языковым стандартом nil. Это работает большую часть времени. По крайней мере, на английском. Дело в том, что я не совсем понимаю, что я собираюсь вставить со своей игровой площадки.
let turkishI = "\u{0130} is not I" // "İ is not I"
turkishI.uppercased() // "İ IS NOT I"
turkishI.uppercased(with: Locale(identifier: "en")) // "İ IS NOT I"
turkishI.uppercased(with: Locale(identifier: "tr")) // "İ İS NOT I"
turkishI.lowercased() // "i̇ is not i"
turkishI.capitalized // "İ Is Not I"
turkishI.lowercased(with: Locale(identifier: "en")) // "i̇ is not i"
turkishI.lowercased(with: Locale(identifier: "tr")) // "i is not ı"
Свифт 3
Инициализатор Locale имеет немного более длинное имя параметра в Swift 3…
turkishI.uppercased(with: Locale(localeIdentifier: "en"))
Легкий юмор
"✈️".uppercased() // 🚀 (Swift 4)
"✈️".uppercased() // 🛸 (Swift 5)
Ответ 3
Свойства uppercaseString
и lowercaseString
на String
больше не находятся в стандартной библиотеке Swift. Вместо этого Foundation
предоставляет их сейчас. Итак, вы должны
import Foundation
чтобы использовать его.
Ответ 4
Вот функция из Apple Docs для Xcode8/Swift3:
/// Returns a lowercase version of the string.
///
/// Here an example of transforming a string to all lowercase letters.
///
/// let cafe = "Café 🍵"
/// print(cafe.lowercased())
/// // Prints "café 🍵"
///
/// - Returns: A lowercase copy of the string.
///
/// - Complexity: O(*n*)
public func lowercased() -> String