在swift 2.2

时间:2016-06-21 09:25:48

标签: swift macos cocoa swift2

我在Swift 2.2中制作了一个“地址簿”,我想为电话号码制作一个自定义类型(总是10位数的正数)。 环顾互联网,我想出了这个:

typealias phoneNumber = 100000000...9999999999

但我不确定它会起作用。

我怎么能这样做?感谢

3 个答案:

答案 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

其中一个缺点是它可能会导致运行时错误。