struct Pos: IntegerLiteralConvertible { var x: Int = 0 var y: Int = 0 init(integerLiteral value: IntegerLiteralType) { x = value y = value } } let pos: Pos = 100 //正常情况下,是无法用=号直接初始化结构体的,因为Pos继承了IntegerLiteralConvertible 协议(接口)所以没有问题。 println(pos.x) println(pos.y) /* 同样的还有 BooleanLiteralConvertible FloatLiteralConvertible StringLiteralConvertible ArrayLiteralConvertible DictionaryLiteralConvertible NilLiteralConvertible */ //再看一个Class的例子 class Person: StringLiteralConvertible { var name = "" init(name n:String){ name = n } typealias ExtendedGraphemeClusterLiteralType = String typealias UnicodeScalarLiteralType = String required convenience init(stringLiteral value: StringLiteralType){ self.init(name: value) } //实际上起作用的是上面的方法,但是因为 StringLiteralConvertible 同样继承自定义了下面两个方法的协议(代理),所以也要定义一次 required convenience init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType){ self.init(name: value) } required convenience init(unicodeScalarLiteral value: UnicodeScalarLiteralType){ self.init(name: value) } func call() { println(name) } } var zhang: Person = "123123" zhang.call() //123123
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。