IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句

   2023-02-09 学习力0
核心提示:本人以前一直都没接触过IOS开发。大概是从年初开始,因为兴趣爱好,在慕课网上学习了最早的swift1.0课程,最近慕课网上的swift课程更新到swift2.1版本了。最近本人的mac本xcode又升级到xcode8版本了,所以swift版本也就升级到3.0了。也是因为兴趣,所以打算好

本人以前一直都没接触过IOS开发。大概是从年初开始,因为兴趣爱好,在慕课网上学习了最早的swift1.0课程,最近慕课网上的swift课程更新到swift2.1版本了。最近本人的mac本xcode又升级到xcode8版本了,所以swift版本也就升级到3.0了。也是因为兴趣,所以打算好好学习swift语言,毕竟这是一门新兴的编程语言,肯定是集结了各种语言的精髓从而创造出来的一门现代语言,希望自己能够跟上这个时代,学好swift,偶尔玩玩IOS开发,虽然这不是我的职业,但是作为一门兴趣爱好也是不错的,说不定以后就会派上用场呢。好记性不如写笔记,笔记可以作为日后查阅的资料,比那些正规的文档说明肯定是有优势的,查找方便,而且是自己的一个学习思路记录。

暂时下面的swift语法是按照2.1版本记录的,有空我会更新到3.0的语法。

最重要的是,现在只有print函数,而println函数没有啦。println()

一、变量

变量标识符必须以字符包括Unicode编码字符、美元字符$、下划线_开头,不能以数字开头,不能包含空格。更不能使用关键字命名。

swift中变量的声明使用var关键字,常量的声明使用let关键字。

1 var name="Swift";
2 var version=2.2;
3 let company:String="Apple";

变量的声明:

1. 可以使用,逗号分割变量来同时声明多个变量

2. 可以使用:类型来同时指明多个变量的类型

在Mac中可以使用option键来查看指定变量的类型信息,按住option键将鼠标移动到变量之上会出现?问号,点击查看。

变量声明时不指定类型,系统会根据变量初始值来确定它的类型,这种机制叫做type inference

3. Swift语言中采用的是Unicode字符编码,所以变量命名是可以使用中文的,也可以使用表情符号(Command+Control+Space)

二、变量类型

a. 整型

整型Int分为Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

单纯定义一个Int类型的整数,会根据系统类型自动使用Int32或者Int64

max和min两个属性分别表示不同位数的整数所代表的最大值和最小值。

而整数进行运算时,如果类型不同,则需要显示进行类型转换。整型数字表示可以使用下划线_进行分割以方便代码的阅读。

var million:Int = 1_000_000;

给一个整型变量赋值时,可以使用二进制0b,八进制0o,十六进制0x,十进制等多种形式。

b.浮点型

Float, Double 区别在于Double的精度更高,一般情况下Float使用32位表示,Double使用64位表示。浮点数的表示可以使用科学计数法。

除数不能为0,但是可以为0.0

当正数除以0.0时结果为正无穷大,而负数除以0.0时结果为负无穷大。

1 var a = 1.0/0.0;  // inf = infinite
2 var b = -1.0/0.0; // -inf = - infinite
3 var c = 0/0.0;  //nan = not a number

tips: CGFloat

一种Float类型值,用于IOS开发。

1 var color:UIColor = UIColor(red: 0.2, green: 0.8, blue: 0.6, alpha: 0.8);
2 UIColor.redColor(); //得到一个红色
3 UIColor.greenColor(); //得到一个绿色

A UIColor object represents color and sometimes opacity (alpha value). You can use UIColor objects to store color data, and during drawing you can use them to set the current fill and stroke colors.

Returns a color object whose RGB values are 0.0, 1.0, and 0.0 and whose alpha value is 1.0.

 

c.Bool布尔值类型

类型值 true, false  注意都是小写

在条件判断语句中,并不能使用0和1这样的数字进行条件判断,Int does not conform to protocol BooleanType

在条件判断语句中,判断语句没有强制要求使用括号,同时逻辑语句必须用{}中括号括起来,即使只有一条语句。

 

给某个类型指定别名使用关键字typealias

1 typealias mytype=Int32;
2 var count:mytype=40;

d. 元组类型Tuple

将不同类型的数据进行整合,从而形成一个新的数据类型。有点类似于声明一个只包含属性成员的特殊对象。元组中的每一个成员的类型可以是基本数据类型,也可以是一个新的元组类型。

1 var person = ("zhangsan", 26, "male");
2 var car = ("car", 120_000, ("machine", 30_000));
3 var a : (String, Int, String);
4 var b : (String, Int, (Float, String)) = ("company", 50, (1.0, "product"));

定义一组变量用括号()括起来并赋予一个元组值,此时类似于元组的解包操作,用于将元组中的某一个值赋给某一个变量

元组中数据的访问形式采用(点语法),下标索引从0开始。当然元组的最后一种声明方式是采用key-value键值对的形式

1 var score : (chinese:Float, math:Float, english:Float, phi:Float, bio:Float) = (98.5, 105, 100.5, 95, 110);
2 print(score.chinese);
3 print("math=\(score.math)");
4 print(score.4);

如果不需要关心元组中的某个值,可以使用下划线_来代替它的变量名

1 var tuples : (x:Int, _:Int) = (5,2);
2 tuples.x
3 tuples.0
4 tuples.1

从swift2.2版本开始,元组可以进行比较。

e. 可选类型

数据类型关键字后面加上?表示可选类型,nil表示值缺失,表达的意思就是这个变量可以有指定类型的值,也可以是nil

1 var age:Int = "5.5".toInt(); // 这肯定是报错的
2 var age:Int? = "5".toInt(); // nil 值缺失

而在可选类型变量之后使用!表示告知系统,当前已经确认该变量是有值的,不会是nil

1 print(age); // {Some:5}
2 print(age!); // 5

强制类型转换!

在Swift语言中,没有隐式转换机制,一切都需要开发者进行显示类型转换。

f. 字符与字符串

字符类型:单个ASCII字符,转义字符,汉字,表情符号,unicode字符\u{n}n表示1到8位的十六进制数。字符必须用双引号括起来,字符的声明必须指定类型Character

在Swift语言中,上述表现形式都是一个字符。 区别于其他语言,上述表现形式可能要用到多个字符来表示。

字符串的创建有两种形式:

1. 直接用双引号表示

2. 通过String()构造器生成

1 var ch1 = "a";
2 var ch2 = "\n";
3 var ch3 = "\u{22}";

1 var str1 = "Swift";
2 var str2 = String("Hello, Swift");
3 var str2 = String(count: 4, repeatedValue: Character("b"));
4 var str3 = String(count: 5, repeatedValue: UnicodeScalar("\u{227}"));
5 var emptyStr1 = "";
6 var emptyStr2 = String();

字符串的拼接使用+, +=, append()方法

字符与字符串的拼接:+需要显示转换类型

append()方法重载, 该方法会改变调用者的值

string.append(c: Character);

string.append(x: UnicodeScalar);

字符串的字符个数获取使用countElements,  .characters .count

1 var str4 = "abcd";
2 print(countElements(str4));

*字符串具有uft16Count属性

*字符串具有的方法

    hasPrefix(), 

    hasSuffix(),

 

    trimmingCharacters(in: CharacterSet)

 

*字符串插值 \()

1 var x:Int = 2;
2 print("\(x)");

* print语法  从Swift2.1开始支持多个参数, separater默认值是空格,terminator默认值是回车符

1 var a = 1, b = 2, c = 3;
2 print(a,b,c);
3 print(a,b,c, separater:"-", terminator: "!!");

 * string.Index类型,定义在String类型的内部

 1 var str = "Hello, Swift";
 2 //var endIndex: String.Index
 3 var endIndex = str.endIndex;
 4 var startIndex = str.startIndex;
 5 str[endIndex.predecessor()];
 6 //Returns the previous consecutive value before `self`.
 7 str[startIndex.successor()];
 8 //Returns the next consecutive value after `self`.
 9 str[startIndex];
10 //Swift2.3
11 startIndex.advancedBy(3);

上面一段代码在swift2.1版本是可行的,而在swift3.0版本中String.Index变化很大

String.Index.predecessor()

String.Index.advancedBy()

String.Index.successor()

 

1 var str = "Hello, Swift";
2 var endIndex = str.endIndex;
3 var startIndex = str.startIndex;
4 var secondIndex = str.index(after: startIndex);
5 var lastSecondIndex = str.index(before: endIndex);
6 var offsetIndex = str.index(startIndex, offsetBy: 5);
7 str[startIndex];

* Range类型

1 //Range<String.Index>
2 var range = startIndex..<endIndex
3 str[range];

* String API

1. replaceRange,  removeRange, removeAtIndex, insert,  append, appendContentsOf

2.  lowercaseString, uppercaseString,  capitalizedString

** NSString与String

NSString通过as关键字可以强制转换为String

var str : String = NSString(format: "one third is %.2f " , 1.0/3.0 ) as String

1 var nsstr:NSString = "one third is 0.333";
2 nsstr.substringFromIndex(4);
3 nsstr.substringToIndex(3);
4 nsstr.substringWithRange(NSMakeRange(4, 5))

 

三、运算符

*    % 取余运算符  余数的符号与被除数的符号一致

*    /   除法运算符

整数之间进行% /获得的都是整数

浮点数之间进行% /获得的都是浮点数

需要强制类型转换, 同时注意正数与负数的计算结果会有不同

同时注意到除数不能为0,但是可以为0.0

*    单目运算符

运算符不要与字符之间有空格

*    区间运算符

a. 全闭区间运算符  ...

b. 前闭后开区间运算符  ..<

区间运算符常常用于循环语句中,特别是循环数组时经常用到 ..< 这个前闭后开区间运算符

tips: for in 循环语句  循环索引在循环体内部是let常量

1 var c =[1,2,3,4,5];
2 for i in 0..<c.count{
3     print(i);  
4 }

 

四、逻辑控制语句

for循环,语法: for init ; condition ; increase { statement } 

while循环

repeat while循环, 其实就是其他语言中的do while循环。只是swift中do关键字用于其他功能,因此这里使用了repeat关键字

switch选择语句:与其他语言最大的区别在于swift中的case条件语句的末尾不再需要添加break语句。那么如何表示多个匹配结果同时执行某一种逻辑语句呢。

那么与其他语言中书写多个case不同,swift中只需要将多个结果写在一个case语句中,并且使用逗号,进行分割。

swith语句中的default语句不能省略掉,除非其他的case语句已经将所有可能的取值都包含进去。如何写一个空语句呢,要么使用break; 要么使用 ();

** switch高级用法

switch可以针对所有的基础类型进行选择,那么case语句中的取值可以是区间0..<60 也可以是元组 (0,0)甚至忽略元组中的某个值 (_ , 0)

fallthrough可以将选择语句的条件进行转移,即执行完上一个case语句,使用fallthrough可以开始执行下一个case语句。

 1 var point = (0,0);
 2 switch point{
 3 case (0,0):
 4     print("this is origin point");
 5     fallthrough
 6 case (_,0):
 7     print("this is a y_axis point");
 8     fallthrough
 9 case (0,_):
10     print("this is a x_axis point");
11 case (let x, let y):
12     print("other point");
13 }

***** case where之间配合实现模式匹配

1 var age = 18;
2 if case 15...20 = age where age%2==0{
3     print("your age is between 15 and 20, and age number is odd");  
4 }
1 var sum = 0;
2 for case let i in 1..<100 where i%3==0{
3     sum+=i;
4 }
5 println(sum);

 ****** guard关键字

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • swift 命令行工具初探
    亲爱的同学们好,今天我们要介绍这么一个东西。相信有过解释型语言(PHP,Ruby,等)使用经验的同学会更加熟悉,就是 Swift 也为我们提供了命令行运行工具,俗称 REPL。好了,我们进入正题,在安装好 Swift 开发环境的机器上,打开命令行,输入 swift 命令,就进
    03-16
  • [Swift]冒泡排序 | Bubble sort
    [Swift]冒泡排序 | Bubble sort
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文
    03-08
  • [Swift] 自定义在 SwiftUI 中实现的可搜索的外观
    [Swift] 自定义在 SwiftUI 中实现的可搜索的外
    首先我找遍了,似乎找不到任何信息......(我遇到了许多根本不起作用的事情......)终于在详细的英文文献中找到了,我会保留下来,希望以后有机会。关于 SwiftUI 中的可搜索searchable是iOS15新增的易于实现的搜索字段。关于这种情况有一个参数placement,您
    03-08
  • [Swift] 检测 SwiftUI ScrollView 中的偏移量
    [Swift] 检测 SwiftUI ScrollView 中的偏移量
    首先你可以用ScrollViewReader做一些可以从iOS14使用的事情。但是,我不能做我想做的事情,所以我想我还能做些什么。再次,可重复使用我尝试过了。执行我将首先发布实现的图像。 (Swift Playgrounds 演示)您可以像这样根据滚动获取坐标。让我们看看实现。1.
    03-08
  • Swift3.0 UICollectionView 删除,拖动
    Swift3.0 UICollectionView 删除,拖动
    UICollectionView实现了一下常见的新闻分类.  附有效果图 近期一直在深入学习swift,实现了CollectionView item的头东与删除,用的都是系统的一些函数方法,看起来比较直观. 第一步:class HotViewController: UIViewController,UICollectionViewDelegate,UICo
    02-09
  • swift -懒加载创建view
     // 只有外界访问到headerView的时候才会去执行闭包, 然后将闭包的返回值赋值给headerView    // 注意: 一定要记住闭包后面需要写上(), 代表执行闭包    //懒加载创建UIView    lazy var headerView: UIView = {        let view = UIView()
    02-09
  • Swift--非常好用的适合局部的代码约束
    // 哪个控件的哪个属性等于(大于、小于)另外一个控件的哪个属性乘以多少再加上多少 eg:let widthContraint = NSLayoutConstraint(item: messageLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLa
    02-09
  • iOS打包framework - Swift完整项目打包Framework,嵌入OC项目使用
    iOS打包framework - Swift完整项目打包Framewor
    场景说明:-之前做的App,使用Swift框架语言,混合编程,内含少部分OC代码。-需要App整体功能打包成静态库,完整移植到另一个App使用,该App使用OC。-所以涉及到一个语言互转的处理,以及一些AppDelegate的代码减除变化。 --------------------------------
    02-09
  • Swift -- 官方文档Swift-Guides的学习笔记
    在经历的一段时间的郁闷之后,我发现感情都是虚伪的,只有代码是真实的(呸)因为看了swift语法之后依然不会用swift,然后我非常作死的跑去看官方文档,就是xcode里自带的help》documentation and API reference其中的swift里的guide这里主要总结一下里面每一
    02-09
  • Swift - 进度条(UIProgressView)的用法
     1,创建进度条1234var progressView=UIProgressView(progressViewStyle:UIProgressViewStyle.Default)progressView.center=self.view.centerprogressView.progress=0.5 //默认进度50%self.view.addSubview(progressView); 2,设置进度,同时有动画效果1p
    02-09
点击排行