正式开学第四天,今天又到了练习日, 那我们大家在一起复习一下这些内容:
控件:UILabel UITextField UIImageView UIButton
变量: int float double long longlong char short
变量类型 变量名称 = 值;
运算符 + - * / % ++ —
计算器步骤:
1.搭建界面(一个文本输入框 一个Label 五个按钮)
2.在加减乘除运算符按钮的里面去把用户输入的数字用一个全局变量保存 并且用一个全局int类型的变量记录加减乘除 清空文本输入框
3.在等于按钮中 把用户输入的第二个数取出来用一个局部变量保存,判断之前保存的int值到底是加减还是乘除 做相对应的运算 得到结果
4.把结果显示到label中
运算符是检查、改变、合并值的特殊符号或短语。例如,加号+ 将两个数相加(如let i = 1 + 2 )。复杂些的运算例如逻辑与运算符&& (如if enteredDoorCode && passedRetinaScan ),或让 i 值加1的便捷自增运算符++i 等。 支持大部分标准 C 语言的运算符,且改进许多特性来减少常规编码错误。如:赋值符(= )不返回值,以防止把想要判断相等运算符(== )的地方写成赋值符导致的错误。数值运算符(+ ,- ,* ,/ ,% 等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致的异常结果。当然允许你使用 Swift 的溢出运算符来实现溢出。详情参见溢出运算符。 区别于 C 语言,在 Swift 中你可以对浮点数进行取余运算(% ),Swift 还提供了 C 语言没有的表达两数之间的值的区间运算符,(a..b 和a…b ),这方便我们表达一个区间内的数值。 本章节只描述了 Swift 中的基本运算符,高级运算符包含了高级运算符,及如何自定义运算符,及如何进行自定义类型的运算符重载。
术语
运算符有一元、二元和三元运算符。 一元运算符对单一操作对象操作(如-a )。一元运算符分前置符和后置运算符,前置运算符需紧排操作对象之前(如!b ),后置运算符需紧跟操作对象之后(如i++ )。 二元运算符操作两个操作对象(如2 + 3 ),是中置的,因为它们出现在两个操作对象之间。 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三元条件运算符(a ? b : c )。 受运算符影响的值叫操作数,在表达式1 + 2 中,加号+ 是二元运算符,它的两个操作数是值1 和2 。
赋值运算符
赋值运算(a = b ),表示用b 的值来初始化或更新a 的值:
?
1
2
3
4
<code
class
=
"hljs cs"
>let b =
10
var a =
5
a = b
// a 现在等于 10</code>
如果赋值的右边是一个多元组,它的元素可以马上被分解多个变量或变量:
?
1
2
<code
class
=
"hljs cs"
>let (x, y) = (
1
,
2
)
// 现在 x 等于 1, y 等于 2</code>
与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以以下代码是错误的:
?
1
2
3
<code
class
=
"hljs cs"
>
if
x = y {
// 此句错误, 因为 x = y 并不返回任何值
}</code>
这个特性使你无法把(== )错写成(= ),由于if x = y 是错误代码,Swift 从底层帮你避免了这些错误代码。
数值运算
中所有数值类型都支持了基本的四则运算: 加法(+ ) 减法(- ) 乘法(* ) 除法(/ )
?
1
2
3
4
<code
class
=
"hljs cs"
>
1
+
2
// 等于 3
5
-
3
// 等于 2
2
*
3
// 等于 6
10.0
/
2.5
// 等于 4.0</code>
与 C 语言和 Objective-C 不同的是,Swift 默认不允许在数值运算中出现溢出情况。但你可以使用 Swift 的溢出运算符来达到你有目的的溢出(如a &+ b )。详情参见溢出运算符。 加法运算符也可用于String 的拼接:
?
1
<code
class
=
"hljs bash"
>
"hello, "
+
"world"
// 等于 "hello, world"</code>
两个Character 值或一个String 和一个Character 值,相加会生成一个新的String 值:
?
1
2
3
4
5
<code
class
=
"hljs cs"
>let dog: Character =
"d"
let cow: Character =
"c"
let dogCow = dog + cow
// 译者注: 原来的引号内是很可爱的小狗和小牛, 但win os下不支持表情字符, 所以改成了普通字符
// dogCow 现在是 "dc"</code>
详情参见字符,字符串的拼接。
求余运算
求余运算(a % b )是计算b 的多少倍刚刚好可以容入a ,返回多出来的那部分(余数)。 注意: 求余运算(% )在其他语言也叫取模运算。然而严格说来,我们看该运算符对负数的操作结果,“求余”比“取模”更合适些。 我们来谈谈取余是怎么回事,计算9 % 4 ,你先计算出4 的多少倍会刚好可以容入9 中:
2倍,非常好,那余数是1(用橙色标出) 在 Swift 中这么来表达:
?
1
<code
class
=
"hljs cs"
>
9
%
4
// 等于 1</code>
为了得到a % b 的结果,% 计算了以下等式,并输出余数 作为结果: × 倍数) + 余数 当倍数 取最大值的时候,就会刚好可以容入a 中。 把9 和4 代入等式中,我们得1:
?
1
<code
class
=
"hljs fix"
>
9
= (
4
×
2
) +
1
</code>
同样的方法,我来们计算 -9 % 4:
?
1
<code
class
=
"hljs cs"
>-
9
%
4
// 等于 -1</code>
把-9和4代入等式,-2是取到的最大整数:
?
1
<code
class
=
"hljs fix"
>-
9
= (
4
× -
2
) + -
1
</code>
余数是-1 。 在对负数b 求余时,b 的符号会被忽略。这意味着a % b 和 a % -b 的结果是相同的。 浮点数求余计算 不同于 C 语言和 Objective-C,Swift 中是可以对浮点数进行求余的。
?
1
<code
class
=
"hljs cs"
>
8
%
2.5
// 等于 0.5</code>
这个例子中,8 除于2.5 等于3 余0.5 ,所以结果是一个Double 值0.5 。
自增和自增运算
和 C 语言一样,Swift 也提供了方便对变量本身加1或减1的自增(++ )和自减(–)的运算符。其操作对象可以是整形和浮点型。
?
1
2
<code
class
=
"hljs cs"
>var i =
0
++i
// 现在 i = 1</code>
每调用一次++i ,i 的值就会加1。实际上,++i 是i = i + 1 的简写,而–i 是i = i - 1 的简写。 ++和– 既是前置又是后置运算。++i ,i++ ,–i 和i– 都是有效的写法。 我们需要注意的是这些运算符修改了i 后有一个返回值。如果你只想修改i的值,那你就可以忽略这个返回值。但如果你想使用返回值,你就需要留意前置和后置操作的返回值是不同的。 当++ 前置的时候,先自増再返回。 当++ 后置的时候,先返回再自增。 例如:
?
1
2
3
<code
class
=
"hljs autohotkey"
>var a =
0
let b = ++a
//a和b现在都是 1
let c = a++
// a 现在 2, 但 c 是 a 自增前的值 1</code>
上述例子,let b = ++a 先把a 加1了再返回a 的值。所以a 和b 都是新值1 。 而let c = a++ ,是先返回了a 的值,然后a 才加1。所以c得到了a 的旧值1,而a加1后变成2。 除非你需要使用i++ 的特性,不然推荐你使用++i 和 –i,因为先修改后返回这样的行为更符合我们的逻辑。
一元负号
数值的正负号可以使用前缀- (即一元负号)来切换:
?
1
2
3
<code
class
=
"hljs lasso"
>let three =
3
let minusThree = -three
// minusThree 等于 -3
let plusThree = -minusThree
// plusThree 等于 3, 或 "负负3"</code>
一元负号(- )写在操作数之前,中间没有空格。
一元正号
一元正号(+ )不做任何改变地返回操作数的值。
?
1
2
<code
class
=
"hljs cs"
>let minusSix = -
6
let alsoMinusSix = +minusSix
// alsoMinusSix 等于 -6</code>
虽然一元+ 做无用功,但当你在使用一元负号来表达负数时,你可以使用一元正号来表达正数,如此你的代码会具有对称美。 复合赋值(Compound Assignment Operators) 如同强大的 C 语言,Swift 也提供把其他运算符和赋值运算(= )组合的复合赋值运算符,加赋运算(+= )是其中一个例子:
?
1
2
<code
class
=
"hljs livecodeserver"
>var a =
1
a +=
2
// a 现在是 3</code>
表达式a += 2 是a = a + 2 的简写,一个加赋运算就把加法和赋值两件事完成了。 注意: 复合赋值运算没有返回值,let b = a += 2 这类代码是错误。这不同于上面提到的自增和自减运算符。 在表达式章节里有复合运算符的完整列表。
比较运算
所有标准 C 语言中的比较运算都可以在 Swift 中使用。 等于(a == b ) 不等于(a != b ) 大于(a > b ) 小于(a < b ) 大于等于(a >= b ) 小于等于(a <= b ) 注意: 也提供恒等=== 和不恒等!== 这两个比较符来判断两个对象是否引用同一个对象实例。更多细节在类与结构。 每个比较运算都返回了一个标识表达式是否成立的布尔值:
?
1
2
3
4
5
6
<code
class
=
"hljs bash"
>
1
==
1
// true, 因为 1 等于 1
2
!=
1
// true, 因为 2 不等于 1
2
>
1
// true, 因为 2 大于 1
1
<
2
// true, 因为 1 小于2
1
>=
1
// true, 因为 1 大于等于 1
2
<=
1
// false, 因为 2 并不小于等于 1</code>
比较运算多用于条件语句,如if 条件:
?
1
2
3
4
5
6
7
<code
class
=
"hljs autohotkey"
>let name =
"world"
if
name ==
"world"
{
println(
"hello, world"
)
}
else
{
println(
"I'm sorry \(name), but I don't recognize you"
)
}
// 输出 "hello, world", 因为 `name` 就是等于 "world"</code>
关于if 语句,请看控制流。
三元条件运算
三元条件运算的特殊在于它是有三个操作数的运算符,它的原型是 问题 ? 答案1 : 答案2 。它简洁地表达根据问题 成立与否作出二选一的操作。如果问题 成立,返回答案1 的结果; 如果不成立,返回答案2 的结果。 使用三元条件运算简化了以下代码:
?
1
2
3
4
5
<code
class
=
"hljs matlab"
>
if
question: {
answer1
}
else
{
answer2
}</code>
这里有个计算表格行高的例子。如果有表头,那行高应比内容高度要高出50像素; 如果没有表头,只需高出20像素。
?
1
2
3
4
<code
class
=
"hljs cs"
>let contentHeight =
40
let hasHeader =
true
let rowHeight = contentHeight + (hasHeader ?
50
:
20
)
// rowHeight 现在是 90</code>
这样写会比下面的代码简洁:
?
1
2
3
4
5
6
7
8
9
<code
class
=
"hljs cs"
>let contentHeight =
40
let hasHeader =
true
var rowHeight = contentHeight
if
hasHeader {
rowHeight = rowHeight +
50
}
else
{
rowHeight = rowHeight +
20
}
// rowHeight 现在是 90</code>
第一段代码例子使用了三元条件运算,所以一行代码就能让我们得到正确答案。这比第二段代码简洁得多,无需将rowHeight 定义成变量,因为它的值无需在if 语句中改变。 三元条件运算提供有效率且便捷的方式来表达二选一的选择。需要注意的事,过度使用三元条件运算就会由简洁的代码变成难懂的代码。我们应避免在一个组合语句使用多个三元条件运算符。
区间运算符
提供了两个方便表达一个区间的值的运算符。 闭区间运算符
闭区间运算符(a…b )定义一个包含从a 到b (包括a 和b )的所有值的区间。 ? 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in 循环中:
?
1
2
3
4
5
6
7
8
<code
class
=
"hljs cs"
>
for
index in
1
...
5
{
println(
"\(index) * 5 = \(index * 5)"
)
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25</code>
关于for-in ,请看控制流。 半闭区间
半闭区间(a..b )定义一个从a 到b 但不包括b的区间。 之所以称为半闭区间,是因为该区间包含第一个值而不包括最后的值。 半闭区间的实用性在于当你使用一个0始的列表(如数组)时,非常方便地从0数到列表的长度。
?
1
2
3
4
5
6
7
8
9
<code
class
=
"hljs cs"
>let names = [
"Anna"
,
"Alex"
,
"Brian"
,
"Jack"
]
let count = names.count
for
i in
0
..count {
println(
"第 \(i + 1) 个人叫 \(names[i])"
)
}
// 第 1 个人叫 Anna
// 第 2 个人叫 Alex
// 第 3 个人叫 Brian
// 第 4 个人叫 Jack</code>
数组有4个元素,但0..count 只数到3(最后一个元素的下标),因为它是半闭区间。关于数组,请查阅数组。
逻辑运算
逻辑运算的操作对象是逻辑布尔值。Swift 支持基于 C 语言的三个标准逻辑运算。 逻辑非(!a ) 逻辑与(a && b ) 逻辑或(a || b ) 逻辑非 逻辑非运算(!a )对一个布尔值取反,使得true 变false ,false 变true 。 它是一个前置运算符,需出现在操作数之前,且不加空格。读作非 a ,然后我们看以下例子:
?
1
2
3
4
5
<code
class
=
"hljs bash"
>let allowedEntry =
false
if
!allowedEntry {
println(
"ACCESS DENIED"
)
}
// 输出 "ACCESS DENIED"</code>
if !allowedEntry语句可以读作 “如果 非 alowed entry。”,接下一行代码只有在如果 “非 allow entry” 为true ,即allowEntry 为false 时被执行。 在示例代码中,小心地选择布尔常量或变量有助于代码的可读性,并且避免使用双重逻辑非运算,或混乱的逻辑语句。 逻辑与
逻辑与(a && b )表达了只有a 和b 的值都为true 时,整个表达式的值才会是true 。 只要任意一个值为false ,整个表达式的值就为false 。事实上,如果第一个值为false ,那么是不去计算第二个值的,因为它已经不可能影响整个表达式的结果了。这被称做 “短路计算(short-circuit evaluation)”。 以下例子,只有两个Bool值都为true 值的时候才允许进入:
?
1
2
3
4
5
6
7
8
<code
class
=
"hljs bash"
>let enteredDoorCode =
true
let passedRetinaScan =
false
if
enteredDoorCode && passedRetinaScan {
println(
"Welcome!"
)
}
else
{
println(
"ACCESS DENIED"
)
}
// 输出 "ACCESS DENIED"</code>
逻辑或
逻辑或(a || b )是一个由两个连续的| 组成的中置运算符。它表示了两个逻辑表达式的其中一个为true ,整个表达式就为true 。 同逻辑与运算类似,逻辑或也是“短路计算”的,当左端的表达式为true时,将不计算右边的表达式了,因为它不可能改变整个表达式的值了。 以下示例代码中,第一个布尔值(hasDoorKey )为false ,但第二个值(knowsOverridePassword )为true ,所以整个表达是true ,于是允许进入:
?
1
2
3
4
5
6
7
8
<code
class
=
"hljs bash"
>let hasDoorKey =
false
let knowsOverridePassword =
true
if
hasDoorKey || knowsOverridePassword {
println(
"Welcome!"
)
}
else
{
println(
"ACCESS DENIED"
)
}
// 输出 "Welcome!"</code>
组合逻辑
我们可以组合多个逻辑运算来表达一个复合逻辑:
?
1
2
3
4
5
6
<code
class
=
"hljs go"
>
if
enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
println(
"Welcome!"
)
}
else
{
println(
"ACCESS DENIED"
)
}
// 输出 "Welcome!"</code>
这个例子使用了含多个&& 和|| 的复合逻辑。但无论怎样,&& 和|| 始终只能操作两个值。所以这实际是三个简单逻辑连续操作的结果。我们来解读一下: 如果我们输入了正确的密码并通过了视网膜扫描; 或者我们有一把有效的钥匙; 又或者我们知道紧急情况下重置的密码,我们就能把门打开进入。 前两种情况,我们都不满足,所以前两个简单逻辑的结果是false ,但是我们是知道紧急情况下重置的密码的,所以整个复杂表达式的值还是true 。
使用括号来明确优先级
为了一个复杂表达式更容易读懂,在合适的地方使用括号来明确优先级是很有效的,虽然它并非必要的。在上个关于门的权限的例子中,我们给第一个部分加个括号,使用它看起来逻辑更明确:
?
1
2
3
4
5
6
<code
class
=
"hljs go"
>
if
(enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
println(
"Welcome!"
)
}
else
{
println(
"ACCESS DENIED"
)
}
// 输出 "Welcome!"</code>
这括号使得前两个值被看成整个逻辑表达中独立的一个部分。虽然有括号和没括号的输出结果是一样的,但对于读代码的人来说有括号的代码更清晰。可读性比简洁性更重要,请在可以让你代码变清晰地地方加个括号吧!
全局变量就是整个源程序都有效的变量;而局部变量会在其所属的函数
或循环等结束后消亡。整个程序都要用的变量定义全局变量,如果就是某个函数用的话,就定义局部变量,以便其他函数可以重新定义同名变量来使用。 要是都用全局变量,那遇到大程序时,程序是由不同人分别编各自的模块或函数,不能避免定义同名变量,到时就会冲突。?
BOOL变量:bool是布尔型变量,也就是逻辑型变量的定义符,类似于float,double
等,只不过float定义浮点型,double定义双精度浮点型。?
————————if判断——————————
1、第一种形式为基本形式:if
if(表达式) 语句
例如:
ain(){
?int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
max=a;
if (max
printf("max=%d",max);
}
2、第二种形式为: if-else
if(表达式)
语句1;
else
3、第三种形式为if-else-if形式
前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
4.第四种形式为switch case break;
switch (i%4) {
case 0:
l.backgroundColor = [UIColor yellowColor];
break;
case 1:
l.backgroundColor = [UIColor blueColor];
break;
case 2:
l.backgroundColor = [UIColor greenColor];
break;
default:
l.backgroundColor = [UIColor redColor];
break;
这种形式比前几种更快最主要它只能在整数时使用
for(表达式1;表达式2;表达式3) 语句
它的执行过程如下:
先求解表达式1。
求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。
求解表达式3。
转回上面第2)步继续执行。
循环结束,执行for语句下面的一个语句。
其执行过程可用下图表示。
for语句最简单的应用形式也是最容易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增量) 语句
循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。例如:
for(i=1; i<=100; i++)sum=sum+i;
先给i赋初值1,判断i是否小于等于100, 若是则执行语句,之后值增加1。再重新判断, 直到条件为假,即i>100时,结束循环。相当于:
i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
对于for循环中语句的一般形式,就是如下的while循环形式:
表达式1;
while(表达式2)
{语句
表达式3;
}
使用for语句应该注意:
for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。
省略了“表达式1(循环变量赋初值)”, 表示不对循环控制变量赋初值。
省略了“表达式2(循环条件)”, 则不做其它处理时便成为死循环。
例如:
for(i=1;;i++)sum=sum+i;
相当于:
i=1;
while(1)
{
sum=sum+i;
i++;
}
省略了“表达式3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
例如:
for(i=1;i<=100;)
{sum=sum+i;
i++;}
省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。
例如:
for(;i<=100;)
{sum=sum+i;
i++;}
相当于:
while(i<=100)
{sum=sum+i;
i++;}
-(返回值类型)方法名称参数介绍:(参数类型)参数名称and参数介绍:(参数类型)参数名称{
如果有返还就加retun
}
内容总结:
1. 变量的作用域 局部变量 全局变量
2.BOOL 取值0或1
3.if语句 else else if
4.switchCase
5.按钮加tag
6.for循环
7.NSTimer
学习ios 重要还是要理清楚思路 在做或者看老师代码的时候 自己多想想为什么 不要自己看着就抄 另外还是要推荐一下 蓝懿IOS这个培训机构 和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
写博客的第十四天,
QQ 565803433;