1,a single statement can be broken into multiple lines ,For example, after an opening parenthesis is a good place:

print(

  "world")

2,Swift is a compiled language, the syntax of message-sending is dot-notation. every noun is an object, and every verb is a message.

3,An object type can be extended in Swift, meaning that you can define your own messages on that type. For example, you can’t normally send the say- Hello message to a number. But you can change a number type so that you can:

    extension Int {
func sayHello() {
            print("Hello, I'm \(self)")
}
    }
1.sayHello() // outputs: "Hello, I'm 1"

4, what “everything is an object” really means. ?

In Swift, then, 1 is an object. In some languages, such as Objective-C, it clearly is not; it is a “primitive” or scalar built-in data type. So the distinction being drawn here is between object types on the one hand and scalars on the other. In Swift, there are no scalars; all types are ultimately object types. That’s what “everything is an object” really means.

Swift has three kinds of object type: classes, structs, and enums. 

5,Variables : A variable is a name for an object. Technically, it refers to an object;

let one =1

var two = 2

one = two //compile error

The two kinds of variable declaration differ in that a name declared with let cannot have its value replaced. A variable declared with let is a constant; its value is assigned once and stays.

Variables literally have a life of their own — more accurately, a lifetime of their own. As long as a variable exists, it keeps its value alive.

6,Functions : A function is a batch of code that can be told, as a batch, to run.

7,A namespace is a named region of a program.

8,The top-level namespaces are modules.

9.  self.   an instance needs a way of sending a message to itself. This is made possible by the magic word self.

It turns out that every use of the word self I’ve just illustrated is completely optional. You can omit it and all the same things will happen 。

The reason is that if you omit the message recipient and the message you’re sending can be sent to self, the compiler supplies self as the message’s recipient under the hood.

10,private:  Supose I want a Dog instance itself to be able to change self.whatADogSays. Then whatADogSays has to be a var; otherwise, even the instance itself can’t change it. Also, suppose I don’t want any other object to know what this Dog says, except by calling bark or speak. Even when declared with let, other objects can still read the value of whatADogSays. Maybe I don’t like that. To solve this problem, Swift provides the private keyword.

11,If you’re ignoring a function call result deliberately, you can silence the compiler warning by assigning the function call to _ (a variable without a name) — for example, _ = sum(4,5). Alternatively, if the function being called is your own, you can prevent the warning by marking the function declaration with @discardableResult.

12,Function Signature :(Int, Int) -> Int 。A function’s signature is, in effect, its type — the type of the function.  The signature of a function must include both the parameter list (without parameter names) and the return type, even if one or both of those is empty;

13,

func echo(string s:String, times n:Int) -> String {
var result = ""
        for _ in 1...n { result += s}
        return result
}

In the body of that function, there is now no times variable available; times is purely an external name, for use in the call. The internal name is n, and that’s the name the code refers to.

14, Default Parameter Values : To specify a default value in a function declaration, append = and the default value after the parameter type:

    class Dog {
func say(_ s:String, times:Int = 1) {
            for _ in 1...times {
print(s)
}}

15, To indicate in a function declaration that a parameter is variadic, follow it by three dots, like this:

    func sayStrings(_ arrayOfStrings:String ...) {
for s in arrayOfStrings { print(s) }
}

16, The default separator: (for when you provide multiple values) is a space, and the default terminator: is a newline; you can change either or both:

    print("Manny", "Moe", separator:", ", terminator:", ")
print("Jack")
// output is "Manny, Moe, Jack" on one line

17, Modi able Parameters ,In the body of a function, a parameter is essentially a local variable. By default, it’s a variable implicitly declared with let.

You can’t assign to it

 func say(_ s:String, times:Int, loudly:Bool) {
loudly = true // compile error

}

If your code needs to assign to a parameter name within the body of a function, declare a var local variable inside the function body and assign the parameter value to it;

func removeCharacter(_ c:Character, from s:String) -> Int {

        var s = s
        var howMany = 0
while let ix = s.characters.index(of:c) {
s.remove(at:ix)
howMany += 1 }
        return howMany
}

this change didn’t affect the original string

If we want our function to alter the original value of an argument passed to it, we must do the following:

  • The type of the parameter we intend to modify must be declared inout.

  • When we call the function, the variable holding the value we intend to tell it to

    modify must be declared with var, not let.

  • Instead of passing the variable as an argument, we must pass its address. This is

    done by preceding its name with an ampersand (&). Our removeCharacter(_:from:) now looks like this:

    1.     func removeCharacter(_ c:Character, from s: inout String) -> Int {
      var howMany = 0
              while let ix = s.characters.index(of:c) {
      s.remove(at:ix)

      howMany += 1 }

              return howMany
      }
 18,You may encounter variations on this pattern when you’re using Cocoa. The Cocoa APIs are written in C and Objective-C, so you probably won’t see the Swift term inout. You’ll probably see some mysterious type such as UnsafeMutablePointer.  
 
let c = UIColor.purple
var r : CGFloat = 0
var g : CGFloat = 0
var b : CGFloat = 0
var a : CGFloat = 0
c.getRed(&r, green: &g, blue: &b, alpha: &a)
    func popoverPresentationController(
_ popoverPresentationController: UIPopoverPresentationController,
willRepositionPopoverTo rect: UnsafeMutablePointer<CGRect>,
in view: AutoreleasingUnsafeMutablePointer<UIView>) {
            view.pointee = self.button2
rect.pointee = self.button2.bounds

}

iOS 10 Programming Fundamentals with Swift 学习笔记 0的更多相关文章

  1. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图 代码工程地址: https://github.c ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://g ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

随机推荐

  1. 毕设记录(ajax)

    有关ajax的cache属性值 cache作用:是否在缓存中读取数据的读取. cache属性是true(默认值)时:在第一次请求完成之后,如果地址和参数不变化,第二次去请求,会默认获取缓存中的数据,不 ...

  2. Java并发编程相关知识整理

    1.什么是进程.线程.多线程?     进程当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.进程间通讯依靠IPC资源,例如管道.套接字     线程是程序中的 ...

  3. 【转】Binlog 基本操作

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般 ...

  4. HTML5离线存储的工作原理和使用

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件. 原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个 ...

  5. 使用JS判断不同的终端设备

    const ua: string = window.navigator.userAgent; const isWeixin: boolean = /MicroMessenger/i.test(ua); ...

  6. ereg

    int ereg ( string $pattern , string $string [, array &$regs ] ) Note: 使用 Perl 兼容正则表达式语法的 preg_ma ...

  7. LJN数理化生信奥队自传

    LJN数理化生信奥队, 原名“LJN信奥队”,简称“ljnoit”. 联系方式: QQ:3046036317 QQ群:555088375 (Offical群) 701124785 (Vip群) 邮箱: ...

  8. 《程序设计入门——C语言》翁恺老师 第五周编程练习记录

    1 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个 ...

  9. 数据类型、运算符及Scanner类练习

    数字加密.要求输入一个四位的正整数,每位数字加5再除以10取余,并替换该数字,再千位数与个位数互换,十位数与百位数互换. import java.util.Scanner;/** * 加密数字问题 * ...

  10. UML之顺序图

    一 定义 顺序图是将交互关系表示为一个二维图.纵向是时间轴(生命线),时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程 ...