• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

学习 swift (1)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html#//apple_ref/doc/uid/TP40015214-CH3-SW1

 

这个链接里面介绍的 swift 的语法大部分都很容易理解。对于部分特别的地方做下记录

Structures support many of the same behaviors as classes, including methods and initializers. One of the most important differences between structures and classes is that structures are always copied when they are passed around in your code, but classes are passed by reference. Structures are great for defining lightweight data types that don’t need to have capabilities like inheritance and type casting.

这里对 struct 和 class 做了比较

    struct 和 class 都有自己的 methods 和 initializers

    struct 和 class 最重要的区别在于:变量传递(赋值/传参)时,struct 是值传递(也就是拷贝,C++ 也是如此),而 class 是传引用(类似 Java)

    如果不需要考虑 继承和类型转换,那么用 struct 比较合适

 

protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol doesn’t actually provide an implementation for any of these requirements—it only describes what an implementation will look like. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol.

1 protocol ExampleProtocal {
2     var simpleDescription: String { get }
3     func adjust()
4 }

简单说,protocol 就是定义了一组 methods, properties balabala的类,不过 protocol 是用来被继承的,被 class, structure, enumeration 继承。实现了 protocal 里的那些东西,就符合这个 protocol。大概可以看成是一种接口吧。

{get} 表示 read-only

不带花括号的函数 adjust 就是声明来让继承 ExampleProtocol 的 class/struct/enumeration 实现的。

delegate 和 protocol 相关链接 http://haoxiang.org/2011/08/ios-delegate-and-protocol/

 

附上练习代码

  1 let individualScores = [75, 43, 103, 87, 12]
  2 var teamScore = 0
  3 for score in individualScores {
  4     if score > 50 {
  5         teamScore += 3
  6     } else {
  7         teamScore += 1
  8     }
  9 }
 10 print(teamScore)
 11 
 12 var optionalName: String? = "John Appleseed"
 13 var greeting = "Hello!"
 14 var optionalHello: String? = "Hello"
 15 
 16 if let hello = optionalHello where hello.hasPrefix("H"), let name = optionalName {
 17     greeting = "\(hello), \(name)"
 18 }
 19 print(greeting)
 20 
 21 let vegetable = "red pepper"
 22 var vegetableComment: String?
 23 switch vegetable {
 24     case "celery":
 25         vegetableComment = "Add some raisins and make ants on a log."
 26     case "cucumber", "watercress":
 27         vegetableComment = "That would make a good tea sandwich."
 28     case let x where x.hasSuffix("pepper"):
 29         vegetableComment = "Is it a spicy \(x)?"
 30     default:
 31         vegetableComment = "Everything tastes good in soup."
 32 }
 33 print(vegetableComment)
 34 
 35 var firstForLoop = 0
 36 for i in 0..<4 {
 37     firstForLoop += i
 38 }
 39 print(firstForLoop)
 40 
 41 var secondForLoop = 0
 42 for _ in 0...4 {
 43     secondForLoop += 1
 44 }
 45 print(secondForLoop)
 46 
 47 
 48 func greet(name: String, day: String) -> String {
 49     return "Hello \(name), today is \(day)."
 50 }
 51 print(greet("hangj", day: "Thursday"))
 52 
 53 let exampleString = "hello"
 54 if exampleString.hasSuffix("lo") {
 55     print("ends in lo")
 56 }
 57 
 58 var array = ["apple", "banana", "dragonfruit"]
 59 array.insert("cherry", atIndex: 2)
 60 print(array)
 61 
 62 class Shape {
 63     var numberOfSides = 0
 64     func simpleDescription() -> String {
 65         return "A shape with \(numberOfSides) sides."
 66     }
 67 }
 68 var shape = Shape()
 69 shape.numberOfSides = 7
 70 var shapeDescription = shape.simpleDescription()
 71 print(shapeDescription)
 72 
 73 class NamedShape {
 74     var numberOfSides = 0
 75     var name: String
 76 
 77     init(name: String) {
 78         self.name = name
 79     }
 80 
 81     func simpleDescription() -> String {
 82         return "A shape with \(numberOfSides) sides."
 83     }
 84 }
 85 let namedShape = NamedShape(name: "my named shape")
 86 print(namedShape.simpleDescription())
 87 
 88 class Square: NamedShape {
 89     var sideLength: Double
 90 
 91     init(sideLength: Double, name: String){
 92         self.sideLength = sideLength
 93         super.init(name: name)
 94         numberOfSides = 4
 95     }
 96 
 97     func area() -> Double {
 98         return sideLength * sideLength
 99     }
100 
101     override func simpleDescription() -> String {
102         return "A suqare with sides of length \(sideLength)."
103     }
104 }
105 let testSquare = Square(sideLength: 5.2, name: "my test square")
106 print(testSquare.area())
107 print(testSquare.simpleDescription())
108 
109 class Circle: NamedShape {
110     var radius: Double
111 
112     init?(radius: Double, name: String) {
113         self.radius = radius
114         super.init(name: name)
115         numberOfSides = 1
116         if radius <= 0 {
117             return nil
118         }
119     }
120 
121     override func simpleDescription() -> String {
122         return "A circle with a radius of \(radius)."
123     }
124 }
125 if let successfulCircle = Circle(radius: 4.2, name: "successful circle") {
126     print(successfulCircle.simpleDescription())
127 }
128 let failedCircle = Circle(radius: -7, name: "failed circle")
129 
130 class Triangle: NamedShape {
131     init(sideLength: Double, name: String) {
132         super.init(name: name)
133         numberOfSides = 3
134     }
135 }
136 let shapesArray = [Triangle(sideLength: 1.5, name: "triangle1"),
137     Triangle(sideLength: 4.2, name: "triangle2"), Square(sideLength: 3.2, name: "square1"),
138     Square(sideLength: 2.7, name: "square2")]
139 var squares = 0
140 var triangles = 0
141 for shape in shapesArray {
142     if let square = shape as? Square {
143         ++squares
144     } else if let triangle = shape as? Triangle {
145         ++triangles
146     }
147 }
148 print("\(squares) squares and \(triangles) triangles.")
149 
150 enum Rank: Int {
151     case Ace = 1
152     case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
153     case Jack, Queen, King
154     func simpleDescription() -> String {
155         switch self {
156             case .Ace:
157                 return "ace"
158             case .Jack:
159                 return "jack"
160             case .Queen:
161                 return "queen"
162             case .King:
163                 return "king"
164             default:
165                 return String(self.rawValue)
166         }
167     }
168 }
169 let ace = Rank.Ace
170 print(ace.simpleDescription())
171 
172 enum Suit {
173     case Spades, Hearts, Diamonds, Clubs
174     func simpleDescription() -> String {
175         switch self {
176             case .Spades:
177                 return "Spades"
178             case .Hearts:
179                 return "hearts"
180             case .Diamonds:
181                 return "diamonds"
182             case .Clubs:
183                 return "clubs"
184         }
185     }
186 }
187 let hearts = Suit.Hearts
188 let heartsDescription = hearts.simpleDescription()
189 print(heartsDescription)
190 
191 struct Card {
192     var rank: Rank
193     var suit: Suit
194     func simpleDescription() -> String {
195         return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
196     }
197 }
198 let threeOfSpades = Card(rank: .Three, suit: .Spades)
199 let threeOfSpadesDescription = threeOfSpades.simpleDescription()
200 print(threeOfSpadesDescription)
201 
202 protocol ExampleProtocal {
203     var simpleDescription: String { get }
204     func adjust()
205 }
206 class SimpleClass: ExampleProtocal {
207     var simpleDescription: String = "A very simple class."
208     var anotherProperty: Int = 69105
209     func adjust() {
210         simpleDescription += "  Now 100% adjusted."
211     }
212 }
213 var a = SimpleClass()
214 a.simpleDescription = "fuck"
215 a.adjust()
216 print(a.simpleDescription)
217 
218 class SimpleClass2: ExampleProtocal {
219     var simpleDescription: String = "Another very simple class."
220     func adjust() {
221         simpleDescription += "  Adjusted."
222     }
223 }
224 var protocolArray: [ExampleProtocal] = [SimpleClass(), SimpleClass(), SimpleClass2()]
225 for instanse in protocolArray {
226     instanse.adjust()
227     print(instanse.simpleDescription)
228 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap