iAh*_*med 315
func randomString(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String((0..<length).map{ _ in letters.randomElement()! })
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.0更新
func randomString(length: Int) -> String {
let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let len = UInt32(letters.length)
var randomString = ""
for _ in 0 ..< length {
let rand = arc4random_uniform(len)
var nextChar = letters.character(at: Int(rand))
randomString += NSString(characters: &nextChar, length: 1) as String
}
return randomString
}
Run Code Online (Sandbox Code Playgroud)
Swift 4.2更新
Swift 4.2在处理随机值和元素方面引入了重大改进.您可以在此处详细了解这些改进.这里的方法简化为几行:
func randomStringWithLength (len : Int) -> NSString {
let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomString : NSMutableString = NSMutableString(capacity: len)
for (var i=0; i < len; i++){
var length = UInt32 (letters.length)
var rand = arc4random_uniform(length)
randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
}
return randomString
}
Run Code Online (Sandbox Code Playgroud)
Jee*_*hut 57
这是一个使用Swiftier语法的现成解决方案.您只需复制并粘贴它即可:
func randomAlphaNumericString(length: Int) -> String {
let allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let allowedCharsCount = UInt32(allowedChars.characters.count)
var randomString = ""
for _ in 0..<length {
let randomNum = Int(arc4random_uniform(allowedCharsCount))
let randomIndex = allowedChars.index(allowedChars.startIndex, offsetBy: randomNum)
let newCharacter = allowedChars[randomIndex]
randomString += String(newCharacter)
}
return randomString
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢具有更多便捷功能的框架,请随时查看我的项目HandySwift.它还包括一个美丽的随机字母数字字符串解决方案:
String(randomWithLength: 8, allowedCharactersType: .alphaNumeric) // => "2TgM5sUG"
Run Code Online (Sandbox Code Playgroud)
Bar*_*zyk 46
您也可以通过以下方式使用它:
extension String {
static func random(length: Int = 20) -> String {
let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomString: String = ""
for _ in 0..<length {
let randomValue = arc4random_uniform(UInt32(base.characters.count))
randomString += "\(base[base.startIndex.advancedBy(Int(randomValue))])"
}
return randomString
}
}
Run Code Online (Sandbox Code Playgroud)
用法简单:
let randomString = String.random()
Run Code Online (Sandbox Code Playgroud)
Swift 3语法:
extension String {
static func random(length: Int = 20) -> String {
let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomString: String = ""
for _ in 0..<length {
let randomValue = arc4random_uniform(UInt32(base.characters.count))
randomString += "\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])"
}
return randomString
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 4语法:
extension String {
static func random(length: Int = 20) -> String {
let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomString: String = ""
for _ in 0..<length {
let randomValue = arc4random_uniform(UInt32(base.count))
randomString += "\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])"
}
return randomString
}
}
Run Code Online (Sandbox Code Playgroud)
小智 26
迅速:
let randomString = NSUUID().uuidString
Run Code Online (Sandbox Code Playgroud)
leo*_*ion 10
使用Swift 4.2,最好的办法是创建一个包含所需字符的字符串,然后使用randomElement选择每个字符:
let length = 32
let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let randomCharacters = (0..<length).map{_ in characters.randomElement()!}
let randomString = String(randomCharacters)
Run Code Online (Sandbox Code Playgroud)
我在这里详细介绍了这些变化.
简单快速 - UUID().uuidString
//返回从UUID创建的字符串,例如"E621E1F8-C36C-495A-93FC-0C247A3E6E5F"
public var uuidString:String {get}
Swift 3.0
let randomString = UUID().uuidString //0548CD07-7E2B-412B-AD69-5B2364644433
print(randomString.replacingOccurrences(of: "-", with: ""))
//0548CD077E2B412BAD695B2364644433
Run Code Online (Sandbox Code Playgroud)
编辑
请不要混淆与UIDevice.current.identifierForVendor?.uuidString它不会给随机值.
无循环,但限制为 43 个字符。如果需要更多,可以修改。与仅使用 UUID 相比,此方法有两个优点:
UUID()仅生成大写字母UUID最多 36 个字符长(包括 4 个连字符),但不包括 4 个连字符则只有 32 个字符长。如果您需要更长的内容,或者不希望包含连字符,请使用base64EncodedString句柄此外,该函数还使用 aUInt来避免负数。
func generateRandom(size: UInt) -> String {
let prefixSize = Int(min(size, 43))
let uuidString = UUID().uuidString.replacingOccurrences(of: "-", with: "")
return String(Data(uuidString.utf8)
.base64EncodedString()
.replacingOccurrences(of: "=", with: "")
.prefix(prefixSize))
}
Run Code Online (Sandbox Code Playgroud)
在循环中调用它来检查输出:
for _ in 0...10 {
print(generateRandom(size: 32))
}
Run Code Online (Sandbox Code Playgroud)
其产生:
Nzk3NjgzMTdBQ0FBNDFCNzk2MDRENzZF
MUI5RURDQzE1RTdCNDA3RDg2MTI4QkQx
M0I3MjJBRjVFRTYyNDFCNkI5OUM1RUVC
RDA1RDZGQ0IzQjI1NDdGREI3NDgxM0Mx
NjcyNUQyOThCNzhCNEVFQTk1RTQ3NTIy
MDkwRTQ0RjFENUFGNEFDOTgyQTUxODI0
RDU2OTNBOUJGMDE4NDhEODlCNEQ1NjZG
RjM2MTUxRjM4RkY3NDU2OUFDOTI0Nzkz
QzUwOTE1N0U1RDVENDE4OEE5NTM2Rjcy
Nzk4QkMxNUJEMjYwNDJDQjhBQkY5QkY5
ODhFNjU0MDVEMUI2NEI5QUIyNjNCNkVF
Run Code Online (Sandbox Code Playgroud)
对于不想输入整个字符集的人:
func randomAlphanumericString(length: Int) -> String {
enum Statics {
static let scalars = [UnicodeScalar("a").value...UnicodeScalar("z").value,
UnicodeScalar("A").value...UnicodeScalar("Z").value,
UnicodeScalar("0").value...UnicodeScalar("9").value].joined()
static let characters = scalars.map { Character(UnicodeScalar($0)!) }
}
let result = (0..<length).map { _ in Statics.characters.randomElement()! }
return String(result)
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特 5.0
// Generating Random String
func randomString(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String((0..<length).map{ _ in letters.randomElement()! })
}
// Calling to string
label.text = randomString(length: 3)
Run Code Online (Sandbox Code Playgroud)
Swift 2.2版本
// based on https://gist.github.com/samuel-mellert/20b3c99dec168255a046
// which is based on https://gist.github.com/szhernovoy/276e69eb90a0de84dd90
// Updated to work on Swift 2.2
func randomString(length: Int) -> String {
let charactersString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let charactersArray : [Character] = Array(charactersString.characters)
var string = ""
for _ in 0..<length {
string.append(charactersArray[Int(arc4random()) % charactersArray.count])
}
return string
}
Run Code Online (Sandbox Code Playgroud)
基本上调用这个方法会生成一个随机字符串,该字符串是传递给函数的整数的长度.要更改可能的字符,只需编辑charactersString字符串即可.也支持unicode字符.
https://gist.github.com/gingofthesouth/54bea667b28a815b2fe33a4da986e327
String来自 any 的纯 Swift 随机数CharacterSet。
用法: CharacterSet.alphanumerics.randomString(length: 100)
extension CharacterSet {
/// extracting characters
/// /sf/answers/3649355321/
public func characters() -> [Character] {
return codePoints().compactMap { UnicodeScalar($0) }.map { Character($0) }
}
public func codePoints() -> [Int] {
var result: [Int] = []
var plane = 0
for (i, w) in bitmapRepresentation.enumerated() {
let k = i % 8193
if k == 8192 {
plane = Int(w) << 13
continue
}
let base = (plane + k) << 3
for j in 0 ..< 8 where w & 1 << j != 0 {
result.append(base + j)
}
}
return result
}
/// building random string of desired length
/// /sf/answers/3002662491/
public func randomString(length: Int) -> String {
let charArray = characters()
let charArrayCount = UInt32(charArray.count)
var randomString = ""
for _ in 0 ..< length {
randomString += String(charArray[Int(arc4random_uniform(charArrayCount))])
}
return randomString
}
}
Run Code Online (Sandbox Code Playgroud)
该characters()函数是我已知的最快的实现。
对于Swift 3.0
func randomString(_ length: Int) -> String {
let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let len = UInt32(letters.length)
var randomString = ""
for _ in 0 ..< length {
let rand = arc4random_uniform(len)
var nextChar = letters.character(at: Int(rand))
randomString += NSString(characters: &nextChar, length: 1) as String
}
return randomString
}
Run Code Online (Sandbox Code Playgroud)
在不寻常的情况下
缓存非常清晰的功能:
func randomNameString(length: Int = 7)->String{
enum s {
static let c = Array("abcdefghjklmnpqrstuvwxyz12345789")
static let k = UInt32(c.count)
}
var result = [Character](repeating: "-", count: length)
for i in 0..<length {
let r = Int(arc4random_uniform(s.k))
result[i] = s.c[r]
}
return String(result)
}
Run Code Online (Sandbox Code Playgroud)
这适用于您拥有固定的已知字符集的情况。
方便提示:
没有0,o,o,i等...人类经常混淆的字符。
通常对预订代码和人类客户将使用的类似代码执行此操作。
| 归档时间: |
|
| 查看次数: |
71149 次 |
| 最近记录: |