Подтвердить что ты не робот

Быстрая замена .uppercaseString или .lowercaseString

Так как Strings в Swift больше не имеют доступных .uppercaseString или .lowercaseString, как бы я мог выполнить эту функцию?

Если у меня есть, например:

var sillyString = "This is a string!"
let yellyString = sillyString.uppercaseString
let silentString = sillyString.lowercaseString

Я хотел бы взять sillyString и изменить его как в верхнем, так и в нижнем регистре. Как мне теперь это делать?

Спасибо заранее!

4b9b3361

Ответ 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