Swift XXXLiteralConvertible 协议的使用

前端之家收集整理的这篇文章主要介绍了Swift XXXLiteralConvertible 协议的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. struct Pos: IntegerLiteralConvertible {
  2. var x: Int = 0
  3. var y: Int = 0
  4. init(integerLiteral value: IntegerLiteralType) {
  5. x = value
  6. y = value
  7. }
  8. }
  9.  
  10. let pos: Pos = 100 //正常情况下,是无法用=号直接初始化结构体的,因为Pos继承了IntegerLiteralConvertible 协议(接口)所以没有问题。
  11.  
  12. println(pos.x)
  13. println(pos.y)
  14.  
  15. /*
  16. 同样的还有
  17. BooleanLiteralConvertible
  18. FloatLiteralConvertible
  19. StringLiteralConvertible
  20. ArrayLiteralConvertible
  21. DictionaryLiteralConvertible
  22. NilLiteralConvertible
  23. */
  24.  
  25. //再看一个Class的例子
  26. class Person: StringLiteralConvertible {
  27. var name = ""
  28. init(name n:String){
  29. name = n
  30. }
  31. typealias ExtendedGraphemeClusterLiteralType = String
  32. typealias UnicodeScalarLiteralType = String
  33. required convenience init(stringLiteral value: StringLiteralType){
  34. self.init(name: value)
  35. }
  36. //实际上起作用的是上面的方法,但是因为 StringLiteralConvertible 同样继承自定义了下面两个方法的协议(代理),所以也要定义一次
  37. required convenience init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType){
  38. self.init(name: value)
  39. }
  40. required convenience init(unicodeScalarLiteral value: UnicodeScalarLiteralType){
  41. self.init(name: value)
  42. }
  43. func call() {
  44. println(name)
  45. }
  46. }
  47.  
  48. var zhang: Person = "123123"
  49. zhang.call() //123123

猜你在找的Swift相关文章