Swift .uppercaseString或.lowercaseString属性替换

Don*_*dro 55 swift

由于Swift中的Strings不再具有.uppercaseString或.lowercaseString属性,我将如何执行该功能?

如果我有例如:

var sillyString = "This is a string!"
let yellyString = sillyString.uppercaseString
let silentString = sillyString.lowercaseString
Run Code Online (Sandbox Code Playgroud)

我想采取sillyString并将其变为大写或小写.我现在该怎么做呢?

提前致谢!

Mik*_*e S 109

Xcode 6.0/Swift 1.0

String是无缝桥接NSString,所以它确实具有uppercaseStringlowercaseString属性,只要你import Foundation(或几乎任何框架,因为它们通常在import Foundation内部.从Swift编程指南的字符串和字符部分:

Swift的String类型与Foundation的NSString类无缝桥接.如果您在Cocoa或Cocoa Touch中使用Foundation框架,除了本章中描述的String功能外,整个NSString API还可用于调用您创建的任何String值.您还可以将String值与任何需要NSString实例的API一起使用.


Xcode 6.1/Swift 1.1

作为@newacct指出,在Xcode 6.1/1.1斯威夫特,uppercaseString以及lowercaseString 在斯威夫特的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!
Run Code Online (Sandbox Code Playgroud)

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!
Run Code Online (Sandbox Code Playgroud)


clo*_*ach 76

斯威夫特4

TL; DR

Swift 3中的新名称使用-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"
Run Code Online (Sandbox Code Playgroud)

不一致:.method()vs .property

注意奇数差异,其中up​​percased()和lowercased()是函数,而大写是一个属性.这似乎是一种疏忽,在这种情况下,希望有一些对快速进化过程感到满意的人会在3.0离开beta之前进行修正.

如果碰巧知道你正在使用的NSString的工作,有对所有三个可用的属性:

NSString(string: "abcd").uppercased
NSString(string: "ABCD").lowercased
NSString(string: "abCd").capitalized
Run Code Online (Sandbox Code Playgroud)

语言很难

上面的方法将整个方法委派字符串隐藏到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 ?"
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

Locale初始化程序在Swift 3中的参数名称略长......

turkishI.uppercased(with: Locale(localeIdentifier: "en"))
Run Code Online (Sandbox Code Playgroud)

轻幽默

"??".uppercased()  //  (Swift 4)
"??".uppercased()  //  (Swift 5)
Run Code Online (Sandbox Code Playgroud)


new*_*cct 13

uppercaseStringlowercaseString对性能String的雨燕标准库都没有了.相反,Foundation现在提供它们.所以你必须这样做

import Foundation
Run Code Online (Sandbox Code Playgroud)

使用它.