Swift에서 임의의 영숫자 문자열을 어떻게 생성 할 수 있습니까?
답변
스위프트 4.2 업데이트
Swift 4.2는 임의의 값과 요소를 처리 할 때 크게 개선되었습니다. 당신은 할 수 있습니다 여기 개선에 대한 자세한 내용 . 다음은 몇 줄로 축소 된 방법입니다.
func randomString(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String((0..<length).map{ _ in letters.randomElement()! })
}
스위프트 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
}
원래 답변 :
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
}
답변
다음 은 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
}
좀 더 편리한 기능을 가진 프레임 워크 를 선호한다면 내 프로젝트 HandySwift를 자유롭게 확인하십시오 . 또한 임의의 영숫자 문자열에 대한 아름다운 솔루션이 포함되어 있습니다 .
String(randomWithLength: 8, allowedCharactersType: .alphaNumeric) // => "2TgM5sUG"
답변
다음과 같은 방법으로도 사용할 수 있습니다.
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
}
}
간단한 사용법 :
let randomString = String.random()
스위프트 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
}
}
스위프트 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
}
}
답변
빠른:
let randomString = NSUUID().uuidString
답변
2019 년 업데이트
특이한 경우에는
성능 문제.
다음은 캐시 하는 매우 명확한 기능입니다 .
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)
}
이것은 당신이 알려진 고정 된 경우입니다 문자 집합을.
편리한 팁 :
“abcdefghjklmnpqrstuvwxyz12345789″는 ‘나쁜’문자를 피합니다.
인간이 종종 혼동하는 문자는 0, o, O, i 등이 없습니다.
이는 종종 사람 고객이 사용할 예약 코드 및 유사한 코드에 대해 수행됩니다.
답변
간단하고 빠른 – . UUID () uuidString
// UUID에서 생성 된 문자열 (예 : “E621E1F8-C36C-495A-93FC-0C247A3E6E5F”)을 반환합니다.
공용 var uuidString : 문자열 {get}
스위프트 3.0
let randomString = UUID().uuidString //0548CD07-7E2B-412B-AD69-5B2364644433
print(randomString.replacingOccurrences(of: "-", with: ""))
//0548CD077E2B412BAD695B2364644433
편집하다
하지 혼동 마십시오 과 UIDevice.current.identifierForVendor?.uuidString
임의의 값을 제공하지 않습니다 그것.
답변
함께 스위프트 4.2 당신의 가장 좋은 방법은 당신이 원하는 문자가 포함 된 문자열을 생성하고 사용하는 것입니다 randomElement를 각 문자를 선택하기 :
let length = 32
let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let randomCharacters = (0..<length).map{_ in characters.randomElement()!}
let randomString = String(randomCharacters)
이러한 변경 사항에 대한 자세한 내용은 여기를 참조하십시오 .