美文网首页iOS_Swift
Swift 生成随机字符串

Swift 生成随机字符串

作者: Mr大喵喵 | 来源:发表于2018-06-12 16:05 被阅读51次
bg1.jpg
首先,让我们定义一个可以生成随机数的协议。这个协议只包含一个函数-----返回Self类型的名为arbitrary()的函数,返回的Self也就是实现了Arbitrary协议的这个类或者结构体的实例
protocol Arbitrary {
    static func arbitrary() -> Self
}
然后,让我们来写一个Int的🌰。使用标准库中的arc4random()函数并将其返回值转换为Int。注意:这里只能生成正整数。事实上,一个完整实现的库也应能够生成负整数。
extension Int: Arbitrary {
    
    static func arbitrary() -> Int {
        return Int(arc4random())
    }
}
现在我们可以生成随机整数

Int. arbitrary()

结果为:

/*
6278582
*/

如果要生成随机字符串,还需要多做一点点工作。首先是生成随机字符:
extension Character: Arbitrary {
    static func arbitrary() -> Character {
        return Character(UnicodeScalar(Int.random(from: 65, to: 90))!)
    }
}

extension Int {
    static func random(from: Int, to: Int) -> Int {
        return from + (Int(arc4random()) % (to - from))
    }
}

这里我们使用对于Int的扩展,自定义的random()函数,

最后就是获得随机字符串的方法
extension String: Arbitrary {
    
    static func arbitrary() -> String {
        let randomLength = Int.random(from: 0, to: 40)
        let randomCharacters = tabulate(times: randomLength) { _ in
            Character.arbitrary()
        }
        return String(randomCharacters)
    }
    
   static func tabulate<A>(times: Int, transform: (Int) -> A) -> [A] {
        return (0..<times).map(transform)
    }
    
}

调用:

String. arbitrary()

这里是我们随机生成了一个介于0~40之间的数randomLength作为字符串的长度,接着调用tabulate()函数。对0到times-1的数字使用map函数,生成由f(0)、f(1)....f(times-1)组成的数组。String的扩展Arbitrary使用tabulate()函数来填充一个随机字符数组。

相关文章

网友评论

    本文标题:Swift 生成随机字符串

    本文链接:https://www.haomeiwen.com/subject/affreftx.html