The Swift Programming Language-官方教程精译Swift(1)小试牛刀
- println("hello, world")
注意:为了获得最好的体验,在 Xcode 当中使用代码预览功能。代码预览功能可以让你编辑代码并实时看到运行结果。 |
- let implicitInteger =
- let implicitDouble = 70.0
- let explicitDouble: Double =
- let label = "The width is"
- let width =
- let widthLabel = label + String(width)
- let apples =
- let oranges =
- let appleSummary = "I have \(apples) apples."
- let fruitSummary = "I have \(apples + oranges) pieces of fruit."
- var shoppingList = ["catfish", "water", "tulips", "blue paint"]
- shoppingList[] = "bottle of water"
- var occupations = [
- "Malcolm": "Captain",
- "Kaylee": "Mechanic",
- ]
- occupations["Jayne"] = "Public Relations"
- let emptyArray = String[]()
- let emptyDictionary = Dictionary<String, Float>()
- shoppingList = [] // 去逛街并买点东西
- let individualScores = [, , , , ]
- var teamScore =
- for score in individualScores {
- if score > {
- teamScore +=
- } else {
- teamScore +=
- }
- }
- teamScore
- var optionalString: String? = "Hello"
- optionalString == nil
- var optionalName: String? = "John Appleseed"
- var greeting = "Hello!"
- if let name = optionalName {
- greeting = "Hello, \(name)"
- }
- let vegetable = "red pepper"
- switch vegetable {
- case "celery":
- let vegetableComment = "Add some raisins and make ants on a log."
- case "cucumber", "watercress":
- let vegetableComment = "That would make a good tea sandwich."
- case let x where x.hasSuffix("pepper"):
- let vegetableComment = "Is it a spicy \(x)?"
- default:
- let vegetableComment = "Everything tastes good in soup."
- }
- let interestingNumbers = [
- "Prime": [, , , , , ],
- "Fibonacci": [, , , , , ],
- "Square": [, , , , ],
- ]
- var largest =
- for (kind, numbers) in interestingNumbers {
- for number in numbers {
- if number > largest {
- largest = number
- }
- }
- }
- largest
- var n =
- while n < {
- n = n *
- }
- n
- var m =
- do {
- m = m *
- } while m <
- m
- var firstForLoop =
- for i in .. {
- firstForLoop += i
- }
- firstForLoop
- var secondForLoop =
- for var i = ; i < ; ++i {
- secondForLoop +=
- }
- secondForLoop
- func greet(name: String, day: String) -> String {
- return "Hello \(name), today is \(day)."
- }
- greet("Bob", "Tuesday")
- func getGasPrices() -> (Double, Double, Double) {
- return (3.59, 3.69, 3.79)
- }
- getGasPrices()
- func sumOf(numbers: Int...) -> Int {
- var sum =
- for number in numbers {
- sum += number
- }
- return sum
- }
- sumOf()
- sumOf(, , )
- func returnFifteen() -> Int {
- var y =
- func add() {
- y +=
- }
- add()
- return y
- }
- returnFifteen()
- func makeIncrementer() -> (Int -> Int) {
- func addOne(number: Int) -> Int {
- return + number
- }
- return addOne
- }
- var increment = makeIncrementer()
- increment()
- func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
- for item in list {
- if condition(item) {
- return true
- }
- }
- return false
- }
- func lessThanTen(number: Int) -> Bool {
- return number <
- }
- var numbers = [, , , ]
- hasAnyMatches(numbers, lessThanTen)
- numbers.map({
- (number: Int) -> Int in
- let result = * number
- return result
- })
- sort([, , , , ]) { $ > $ }
- class Shape {
- var numberOfSides =
- func simpleDescription() -> String {
- return "A shape with \(numberOfSides) sides."
- }
- }
- var shape = Shape()
- shape.numberOfSides =
- var shapeDescription = shape.simpleDescription()
这个版本的Shape类缺少了一些重要的东西:一个构造函数来初始化类实例。使用init来创建一个构造器。
- class NamedShape {
- var numberOfSides: Int =
- var name: String
- init(name: String) {
- self.name = name
- }
- func simpleDescription() -> String {
- return "A shape with \(numberOfSides) sides."
- }
- }
- class Square: NamedShape {
- var sideLength: Double
- init(sideLength: Double, name: String) {
- self.sideLength = sideLength
- super.init(name: name)
- numberOfSides =
- }
- func area() -> Double {
- return sideLength * sideLength
- }
- override func simpleDescription() -> String {
- return "A square with sides of length \(sideLength)."
- }
- }
- let test = Square(sideLength: 5.2, name: "my test square")
- test.area()
- test.simpleDescription()
- class EquilateralTriangle: NamedShape {
- var sideLength: Double = 0.0
- init(sideLength: Double, name: String) {
- self.sideLength = sideLength
- super.init(name: name)
- numberOfSides =
- }
- var perimeter: Double {
- get {
- return 3.0 * sideLength
- }
- set {
- sideLength = newValue / 3.0
- }
- }
- override func simpleDescription() -> String {
- return "An equilateral triagle with sides of length \(sideLength)."
- }
- }
- var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
- triangle.perimeter
- triangle.perimeter = 9.9
- triangle.sideLength
- class TriangleAndSquare {
- var triangle: EquilateralTriangle {
- willSet {
- square.sideLength = newValue.sideLength
- }
- }
- var square: Square {
- willSet {
- triangle.sideLength = newValue.sideLength
- }
- }
- init(size: Double, name: String) {
- square = Square(sideLength: size, name: name)
- triangle = EquilateralTriangle(sideLength: size, name: name)
- }
- }
- var triangleAndSquare = TriangleAndSquare(size: , name: "another test shape")
- triangleAndSquare.square.sideLength
- triangleAndSquare.triangle.sideLength
- triangleAndSquare.square = Square(sideLength: , name: "larger square")
- triangleAndSquare.triangle.sideLength
- class Counter {
- var count: Int =
- func incrementBy(amount: Int, numberOfTimes times: Int) {
- count += amount * times
- }
- }
- var counter = Counter()
- counter.incrementBy(, numberOfTimes: )
- let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
- let sideLength = optionalSquare?.sideLength
- enum Rank: Int {
- case Ace =
- case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
- case Jack, Queen, King
- func simpleDescription() -> String {
- switch self {
- case .Ace:
- return "ace"
- case .Jack:
- return "jack"
- case .Queen:
- return "queen"
- case .King:
- return "king"
- default:
- return String(self.toRaw())
- }
- }
- }
- let ace = Rank.Ace
- let aceRawValue = ace.toRaw()
- if let convertedRank = Rank.fromRaw() {
- let threeDescription = convertedRank.simpleDescription()
- }
- enum Suit {
- case Spades, Hearts, Diamonds, Clubs
- func simpleDescription() -> String {
- switch self {
- case .Spades:
- return "spades"
- case .Hearts:
- return "hearts"
- case .Diamonds:
- return "diamonds"
- case .Clubs:
- return "clubs"
- }
- }
- }
- let hearts = Suit.Hearts
- let heartsDescription = hearts.simpleDescription()
- struct Card {
- var rank: Rank
- var suit: Suit
- func simpleDescription() -> String {
- return "The \(rank.simpleDescription()) of \
- (suit.simpleDescription())"
- }
- }
- let threeOfSpades = Card(rank: .Three, suit: .Spades)
- let threeOfSpadesDescription = threeOfSpades.simpleDescription()
- enum ServerResponse {
- case Result(String, String)
- case Error(String)
- }
- let success = ServerResponse.Result("6:00 am", "8:09 pm")
- let failure = ServerResponse.Error("Out of cheese.")
- switch success {
- case let .Result(sunrise, sunset):
- let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
- case let .Error(error):
- let serverResponse = "Failure... \(error)"
- }
- protocol ExampleProtocol {
- var simpleDescription: String { get }
- mutating func adjust()
- }
- class SimpleClass: ExampleProtocol {
- var simpleDescription: String = "A very simple class."
- var anotherProperty: Int =
- func adjust() {
- simpleDescription += " Now 100% adjusted."
- }
- }
- var a = SimpleClass()
- a.adjust()
- let aDescription = a.simpleDescription
- struct SimpleStructure: ExampleProtocol {
- var simpleDescription: String = "A simple structure"
- mutating func adjust() {
- simpleDescription += " (adjusted)"
- }
- }
- var b = SimpleStructure()
- b.adjust()
- let bDescription = b.simpleDescription
- extension Int: ExampleProtocol {
- var simpleDescription: String {
- return "The number \(self)"
- }
- mutating func adjust() {
- self +=
- }
- }
- .simpleDescription
练习:给Double类型写一个扩展,添加absoluteValue功能。
- let protocolValue: ExampleProtocol = a
- protocolValue.simpleDescription
- // protocolValue.anotherProperty // Uncomment to see the error
- func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
- var result = ItemType[]()
- for i in ..times {
- result += item
- }
- return result
- }
- repeat("knock", )
- // Reimplement the Swift standard library's optional type
- enum OptionalValue<T> {
- case None
- case Some(T)
- }
- var possibleInteger: OptionalValue<Int> = .None
- possibleInteger = .Some()
在类型名后面使用where来指定一个需求列表——例如,要限定实现一个协议的类型,需要限定两个类型要相同,或者限定一个类必须有一个特定的父类。
- func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
- for lhsItem in lhs {
- for rhsItem in rhs {
- if lhsItem == rhsItem {
- return true
- }
- }
- }
- return false
- }
- anyCommonElements([, , ], [])
The Swift Programming Language-官方教程精译Swift(1)小试牛刀的更多相关文章
- The Swift Programming Language-官方教程精译Swift(9) 枚举-- --Enumerations
枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值. 如果你熟悉 C 语言,你就会知道,在 C 语言中枚举指定相关名称为一组整型值.Swift 中的枚举更加灵活 ...
- The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以捕获和存储其 ...
- The Swift Programming Language-官方教程精译Swift(7)函数 -- Functions
函数 函数是执行特定任务的代码自包含块.通过给定一个函数名称标识它是什么,并在需要的时候使用该名称来调用函数以执行任务. Swift的统一的功能语法足够灵活的,可表达任何东西,无论是不带参数名称的简单 ...
- The Swift Programming Language-官方教程精译Swift(6)控制流--Control Flow
Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行不同代码分支的if和switch语句,还有控制流程跳转到其他代码的break和continu ...
- The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types
Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift语言里的数 ...
- The Swift Programming Language-官方教程精译Swift(4)字符串和字符
String 是一个有序的字符集合,例如 "hello, world", "albatross".Swift 字符串通过 String 类型来表示,也可以表示为 ...
- The Swift Programming Language-官方教程精译Swift(3)基本运算符
运算符是检查, 改变, 合并值的特殊符号或短语. 例如, 加号 + 把计算两个数的和(如 let i = 1 + 2). 复杂些的运行算包括逻辑与&&(如 if enteredDoor ...
- The Swift Programming Language-官方教程精译Swift(2)基础知识
Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Ar ...
- 一群牛人翻译:The Swift Programming Language 中文版
无聊闲逛GIthub,看到一群牛人在github上创建了一个关于Switf的文档翻译项目 The Swift Programming Language 中文版 项目地址:中文版 Apple 官方 Sw ...
随机推荐
- 【007】【JVM——内存分配和恢复策略】
内存分配与收回策略 JVM的自己主动内存管理要自己主动化地解决两个问题:对象分配内存以及回收分配给对象的内存.回收内存前几篇已经讲了.如今说内存分配.对象的内存分配一般分配在堆内存中,也可能经过 ...
- C语言标准库函数qsort具体解释
1 函数简单介绍 功 能: 使用高速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(c ...
- 我有DIY一Android遥控-所有开源
我有DIY一Android遥控-所有开源 1.试用 记得宋宝华在「设备驱动开发具体解释」提出一个这种理论「软件和硬件互相渗透对方的领地」,这次证明还是确实是这样,使用上层APP软件加上简单的更为简单的 ...
- python学习——编码
为了将各种不同的语言都包括在同一的字符集中,满足国际间的信息交流国际上制定了UNICODE字符集. 通过使用UNICODE字符集能够满足跨语言的文字处理,有效的避免乱码产生. 用法:在脚本中添加下面代 ...
- 使用js在新窗口中POST数据
最近在做自己的博客,写文章的时候有一个预览功能,当时使用的是弹出框来进行预览,感觉体验不是很好. 然后想到了写邮件时候的新窗口预览,查了下126邮箱和qq邮箱的预览实现效果,以及各种谷歌百度stack ...
- Webpact打包React后端Node+Express
Webpact打包React后端Node+Express 前言 React官方推荐用Browserify或者Webpack 来开发React组件. Webpack 是什么?是德国开发者 Tobias ...
- 百度echarts扇形图每个区块增加点击事件
效果图:操作人员要求 :我想看这个扇形图对应的 页面信息,给我加个链接跳转:原先的chart.js发现没有api,后来改用百度的echart.js <!DOCTYPE html> < ...
- Meld Diff for windows 安装和配置
Meld Diff for windows 安装和配置 假设你在ubuntu 正在开发中, meld diff 此工具你肯定不会感到陌生. 而且很容易使用. 在网上看 meld for Windows ...
- POJ--2289--Jamie's Contact Groups【二分图的多个匹配+二分法答案】
链接:id=2289">http://poj.org/problem?id=2289 意甲冠军:有n个人,m个分组,每一个人能够分配到一些组别.问怎样分能使得人数最多的组别人数最少. ...
- 由Java代码运行shell命令/脚本
JDK有两种方法自带通Runtime.getRuntime().exec()和ProcessBuilder课上做, 后者是JDK1.5引进后,,政府还提出要放弃使用Runtime顺便做.现的时候就是採 ...