我在Swift 2.2中制作了一个“地址簿”,我想为电话号码制作一个自定义类型(总是10位数的正数)。 环顾互联网,我想出了这个:
typealias phoneNumber = 100000000...9999999999
但我不确定它会起作用。
我怎么能这样做?感谢
答案 0 :(得分:1)
您可以使用PhoneNumberKit。
然后它会像以下一样简单:
do {
let phoneNumber = try PhoneNumber(rawNumber:"+33 6 89 017383")
}
catch {
print("Generic parser error")
}
答案 1 :(得分:0)
使用类或结构来代替数字,然后使用验证例程来确定正确数字作为initailizer的一部分。
答案 2 :(得分:0)
所有这些都是非常大的数字,即使32位整数也不足以存储9999999999,编译器将显示溢出的错误。
也许你应该制作一个PhoneNumber类型并使其成为IntegerLiteralConvertible来创建它,就像它是一个数字。如上所述,您必须使用64位类型。
public struct PhoneNumber: IntegerLiteralConvertible, CustomStringConvertible {
var phoneNumber: UInt64
public init(integerLiteral value: UInt64) {
if UInt64(100000000)...UInt64((UInt64(1000000000) * UInt64(10)) - UInt64(1)) ~= value {
phoneNumber = value
}
else {
fatalError()
}
}
public var description: String {
return "+\(phoneNumber)"
}
public func call() {
//custom implementation
}
}
您可以在此处添加任何其他方法,例如“call()”。用法很简单,但您必须明确告诉编译器类型。
let momsNumber: PhoneNumber = 3630123456
其中一个缺点是它可能会导致运行时错误。