Xcode入门

前言:
因为以前自己也想从互联网上学习编程,但发现里面很多都是大坑,一段代码放那,不知道在哪输,还有些伪代码,照着输入了却是错误的代码。所以让我感觉编程对新人极大的不友好。现在自己有机会写这些文章,虽然还是个初学者,但我希望可以尽可能有耐心而且全面的写好它,希望新人能从中学习到许多,同时也希望编程不要再高高在上,可以更加亲民一些,让所有人都可以学习。

Swift第一周学习总结

1环境

练习Swift首先点击Scode2(注:我的版本是7.2)然后选择Get started with a playgroud ,如图:


屏幕快照 2016-08-06 上午8.52.50.png

进入后选择ios,点击下一步


屏幕快照 2016-08-06 上午9.09.59.png

选择存储位置后创建,在这个环境下,你可以一边输入,电脑一边帮你运行结果,但是这样输入会很慢。
另一种建立也是比较常用的方法:打开Scode2,选择Create a new Xcode project,
屏幕快照 2016-08-06 上午9.17.37.png

然后选择OS X下面的APPlication 里面的Command Line Tool,点击下一步,如图:


屏幕快照 2016-08-06 上午9.22.53.png

为文件命名,前面三个名字都要写,第一个Product Name:为文件命名,Oranganization Name:为公司名,没有可以自己YY,Organization Identifler:大部分是域名反写加文件名,如baidu.com反写就是com.baidu,没有也可以自己YY,最后语言选择Swift,点击下一步。
屏幕快照 2016-08-06 上午9.26.30.png

选择位置创建好后,选择main.swift,在里面就可以开始编写程序了。(注:由于SWIFT编写没有main函数,主要是因为有main.swift,所有一定不要修改文件名)
123154.png
tip:由于该文件下没有手动输入方法,可以使用C为它提供手动输入方法,方法如下:

1.右击左上文件处,选择New File...新建,如图:


屏幕快照 2016-08-06 上午9.49.18.png

下拉选择OS X中的Source里的C File,点击下一步,如图:


屏幕快照 2016-08-06 上午10.00.43.png

为文件命名为input,下面的勾要选上,下一步,选择位置创建。如图
屏幕快照 2016-08-06 上午9.50.26.png

屏幕快照 2016-08-06 上午9.50.47.png

2.在左侧选择input.h,在里面写入long inputInt();和 double inputDouble();(定义2个输入类),如图:


屏幕快照 2016-08-06 上午9.52.12.png

然后选择input.c,输入
#include "input.h"
long inputInt() {
    long a;
    scanf("%ld",&a);
    return a;
}
double inputDouble (){
    double a;
    scanf("%lf",&a);
    return a;
}

如图:


屏幕快照 2016-08-06 上午9.55.24.png

最后,选择myfirst-Bridging-Header.h输入:

#import "input.h"

如图:

屏幕快照 2016-08-06 上午9.55.49.png

3.点击调试(在左上角)后提示BUILD SUCCEEDED就成功了。如图:
屏幕快照 2016-08-06 上午10.32.50.png

屏幕快照 2016-08-06 上午10.33.14.png

有了这些,你就可以遨游程序的海洋了!!!

2程序设计

什么是程序?
程序时指令的集合。
而程序设计就是通过编译将SWIFT代码变成机器代码
实例:

print("Hello, World!", terminator:"")
print("大家好")

Swift语言的特点:

1.使用print()输出时,自动添加换行符terminator:”\n”,如果不希望它自动换行,只需输入terminator:""即可
2.分号可以省略,除非一行写多条语句,一般一行不会写多条语句
3.Swift可以自动推断值的类型
4.整型Int最大只能算到20!,如果要算更大的数要使用Double类型
5.注意每次程序上面有#import Foundation

3变量和常量

除了了常见的变量和常量,如:

//自动确定变量类型(var:变量;let:常量)
var a = 100
let b = 50
//b=10 编译错误

还有元组,如:

let stu:(id:Int,name:String,gender:Bool,age:Int) = (1001,"王大锤",true,23)
//输出方法1
print(stu.0)
print(stu.1)
print(stu.2)
print(stu.3)
//输出方法2
print(stu.age)
print(stu.gender)
print(stu.id)
print(stu.name)

tips:元组可以很方便的交换2个数的大小

//定义x和y
var x= 10,y=11
//交换
(x,y)= (y,x)
//输出
print("x=\(x),y=\(y)")

自定义类型,如:

typealias ASP = Int
var a: ASP = 100

虽然a的类型是ASP但是它本质还是Int
tip:关于常量和变量的定义:一般来说,在Swift要尽量就数值类型定义为一个常量,因为系统会自动对常量进行优化。只有对那些数值经常发生改变的,才会定义为变量。而我的经验就是不管什么先定义成常量,如果系统报错,在对进行修改...

4运算符

算数运算符:加,减,乘,整除,取余数。
关系运算符:== ,!= , > , >= , < , <= ,而它们的结果产生Bool值,即:true和false。

var c = a + b
//输出时在双引号内使用\()是转义字符,可以直接输出括号内部值
print("\(c)")
//不加双引号直接输出值
print(a-b)
print(a*b)
//整数除以整数结果也是整数(不会出现小数部分)a/b表示a除以b取整数(不会四舍五入,直接切掉小数部分),而a%b表示a除以b取余数
print(a/b)
//12.0 swift 自动推断出为double
//手动定义x,y为常量,类型为Double,值为321和123,输出以小数的形式输出
let x: Double = 321
let y: Double = 123
print(x/y)
//进行数学运算时左右两边必须类型相同
print(x/Double(b))
//Int取整数时不会四舍五入

展示一个简单计算加减乘除运算

print("请输入第一个数:")
let a = inputDouble()
print("请输入第二个数:")
let b = inputDouble()
print("\(a)+\(b)=\(a+b)")
print("\(a)-\(b)=\(a-b)")
print("\(a)*\(b)=\(a*b)")
print("\(a)/\(b)=\(a/b)")
print("\(a)%\(b)=(\(a%b))")

tips:除运算符号等意外所有的东西都有自己的值,比如:汉字~,所以汉字也能进行比较,一般查看汉族大小的方法有

//定义一个常量str
let str = "有兽焉"
//定义TEMP获得str中的文字序号
for temp  in str.utf16{
//打印temp
    print(temp)
}

5分支结构

分支结构就是我们常看见的If,else结构,也就是条件运算,满足条件是一种情况,不满足是另一种情况。
例如:
计算某一年是不是闰年:

import Foundation
print("请输入一个年份,例如1982")
let year = inputInt()
//&&-短路与运算(而且)
//||-短路或运算(或者)
//四年1闰,百年不闰,四百年又闰
if year % 4 == 0 && year % 100 != 0 || year % 400 == 0 {
    print("\(year)年是闰年")
}
else {
    print("\(year)年不是闰年")
}

进化版:计算某年某月有多少天(注:代码在最后)
提示:
1.要求用户输入年份,月份
2.开始判断,如果月份为1.3.5.7.8.10.12,如果月份为4,6,9,11
3.如果月份为2月,再判断是平年还是闰年
4.输出天数
计算个人所得税,题目如下图所示:


QFImage_2016-08-02_16.11.38.png
import Foundation
//计算实际资金
print("请输入工资",terminator: "")
let salary = inputDouble()
print("请输入五险一金", terminator: "")
let insurance = inputDouble()
//定义diff判断含税级距
let diff = salary - insurance - 3500
//定义rate为税率,税率由于是小数,所以采用Double类型
let rate: Double
//定义deduction为速算扣除数,因为税率是小数,为了后面方便计算,所以全部定义为Double类型
let deduction: Double
if diff <= 0 {
    rate = 0.00
    deduction = 0
    
}else if diff <= 1500{
    rate = 0.03
    deduction = 0
    
}else if diff <= 4500{
    rate = 0.1
    
    deduction = 105
    
}else if diff <= 9000{
    rate = 0.2
    deduction = 555
    
}else if diff <= 35000{
    rate = 0.25
    deduction = 1005
    
}else if diff <= 55000{
    rate = 0.3
        deduction = 2755
}else if diff <= 80000{
    rate = 0.35
        deduction = 5505
}else{ rate = 0.45
    deduction = 13505
    }
//定义tax为个人所得税
let tax = diff * rate - deduction
print("个人所得税为:¥\(tax)元")
print("实际收入为:¥\(salary-insurance-tax)元")

使用switch计算判断你的工资收入是什么级别的:

print("请输入你的月薪", terminator:"")
//定义slary为你的年薪
let salary = inputInt() * 13
//如果年薪大于0,开始判断
if salary >= 0{
switch salary {
    case 0:print("你是一个无业游民")
    //...两边为闭区间
    case 1...30000:print("你是一个小码畜")
    case 30001...60000:print("你是一个码奴")
    case 60001...10000:print("你是一个大码农")
    case 100001...200000:print("你是一个IT民工")
    case 200001...500000:print("你是一优秀的IT工程师")
    //..<区间为左闭右开
    case 500001..<10000000:print("你是一个IT精英")
    case 10000000..<100000000:print("你是IT大哥")
    default :print("你是IT领袖")
    
}
}
//如果你的工资为负数
else {
    print("你是创业者")
}

6循环结构

循环结构分为三种循环,当型循环,直到型循环和for循环。下面演示用三种循环分别求1到100的和。

//求1到100的和方法1.for循环
var s = 0
//i的大小是从1到100递加
for i in 1...100{
       s += i
    }
print("和是\(s)")
求1到100的和方法2.当型循环
var i = 1
var s = 0
//当x<=100时执行循环
while i <= 100 {
    s += i
    i += 1
}
print("和为\(s)")

//求1到100的和方法3.直到循环(至少执行1次)
var i = 1
var s = 0
repeat{
 s += i
 i += 1
}while i <= 100
print("和为\(s)")

进阶循环开始——————————————
1.找到1到100以内所有的质数

//定义一个新的算法isPrime(),它需要一个Int型的数n,输出一个bool型的值
func isPrime(n:Int) -> Bool{
//定义一个变量i=2
    var i = 2
   //当i<\sqrt{n}(注:可以极大提高运行速度,在根号前的数如果没有能整除的那么之后也就不会有了,数学优化)
    while  i <= Int(sqrt(Double(n))) {
    //如过有能被整出的,那么返回FALSE值
        if n % i == 0 {
            return  false
            //使循环提前结束
            //break不够好
        }
        //i自增
        i += 1}
        //否则返回true
    return true
}
//n从1到100
for n in 1...100{
   //这里面有一个简写就是isPrime(n)=true,默认为true,所以省略
    if isPrime(n){
    //输出所有返回值为true的n
        print(n)
    }
}

tips:在使用循环时,穷举法可以解决许多问题,例如:
百钱百鸡:有100块,公鸡5块一只,母鸡3块,小鸡1块3个,问要买100只鸡有多少买法?

//百钱百鸡
//GET:穷举法
//最多买20只公鸡
for x in 0...20 {
//最多买33只母鸡
    for y in 0...33 {
    //最多买100只小鸡
        for z in 0...99{
        //如果公鸡加母鸡加小鸡等于100并且公鸡钱加母鸡钱加小鸡钱为100并且小鸡是3的倍数
            if x+y+z == 100 && 5*x + 3*y + z/3 == 100 && z % 3 == 0{
            //那么输出所有满足条件的结果
                print("公鸡\(x)只,母鸡\(y)只,小鸡\(z)只")
            }
        }
    }
}
//2如果已知XY,则z=100-x-y(可以优化程序)
for x in 0...20 {
    for y in 0...33 {
        let z = 100 - x - y
            if 5*x + 3*y + z/3 == 100 && z % 3 == 0{
                print("公鸡\(x)只,母鸡\(y)只,小鸡\(z)只")
            }
    }
}

自行完成一个猜数字的游戏(注:代码在最后)
tip:随机生成一个100以内的数(Int(arc4random_uniform(100)) + 1)
如果猜错,会提示猜大还是猜小了
用二分法最多7次猜出

7数组

数组相当于一个容器,用来存储其他东西。与数组类似的还有字典和集合。
数组的定义:

////放整数的数组,一般定义为变量进行计算
//var ff:[Int]
////定义一个放整数的数组(6个元素,初始值为0)
//var f = [Int](count: 6, repeatedValue: 0)
////给数组1赋值100(数组的第一位为0)
//f[0] = 100
//数组
//1.创建数组
var array = [String] (arrayLiteral: "HELLO" ,"world")
var array2:[Int]=[]//创建数组的字面量语法(类型可以省略的)
var array3 = [1,2,23,5,4]
//创建数100位每个1
var array4 = [Int](count: 100, repeatedValue: 1)
var array5 = [String](arrayLiteral: "你好","世界")
//2.获取数组元素的个数
print(array.count)
print( array2.count)
print(array3.count)
print(array4.count)
print(array5.count)
//3.数据的遍历
for i in 0..<array3.count{
    //[]是对数组进行下标运算(算出指定位置的元素)
    print(array3[i])
}
//3.1.只读循环(不进行修改)
for str in array5 {
    print(str)
}
//3.2.修改数组
for i in 0..<array.count{
    if i == 0{
        array[i] = "你好"
        
    }
}
//4.向数组中添加元素
array.append("i am")
array.append("coming")//依次插入
array.insert("my", atIndex: 1)//在第二个前面添加
print(array5)
//5.对数组删除
//array.removeAll()//删除所有
//array.removeAll(keepCapacity: true)//删除所有但保留空间
//array.removeAtIndex(`)//删除某一个
//array.removeFirst()//删除第一个
//array.removeFirst(<#T##n: Int##Int#>)//删除前n个
//array.removeLast()//删除最后一个
//array.removeRange(2...3)//删除一个区域
//6数组的复制
var   array6 = array
array6[2] = "space"
print(array6)
let array7 = array6 + array5
print(array7)
//array6[2...4] = ["a","b"]//之后没写的自动删除
for (i,value) in array7.enumerate(){
    print("\(i).\(value)")
}

数组的实例:
30个人围成一圈报数,,15个基督徒,15个正常人。如果报道9就出去,下一个人重新从1开始报,以此类推最后全报完后15正常人全部出列,问他们是怎么站位的

//定义一个数组包含30人,类型是BOOL型用来区分正常人和基督徒,展示先全部定位基督徒,即:true
var manArray = [Bool](count: 30, repeatedValue: true)
var counter = 0 //出列的数量
var num = 0   //报数
var index = 0 //数组的下标
//当出列人数小于15人时重复执行
while counter < 15 {
    //报数出列9,如果人的下标为TRUE,则开始循环
    if manArray[index] {
     //报数自增
        num += 1
        //直到报数为9
        if num == 9  {
        //那么把这个人标记为FALSE即:正常人
        manArray[index] = false
        //并且出列人数加一
        counter += 1
        //并且报数重新开始
        num = 0
        }
    }
    //数组下标自增,即:大家围城圈报数
    index+=1
    //如果下标等于最大人数,即:报数报完一圈
    if index == manArray.count{
    //那么就从第一个人重新开始报
    index = 0
    }
}
//定义一个person获取数组内所有值
for person in manArray {
//如果值是true那么输出基督徒否则输出正常人
    print(person ? "基":"非",terminator:"")
}

某年某月有多少天

print("请输入年和月用空格隔开(例如:1980 2)")
let year = inputInt()
let mouth = inputInt()
let  day :Int
//如果输入的月份大于12或者小于1直接输出时间错误并退出
    if mouth < 1 || mouth > 12 {
    print("时间错误")
    exit(0)
    }
    //如果为月份为2月
    else if mouth == 2 {
    //双条件使用三元运算可以简化代码
    //如果满足闰年2月就有29天否则为28天
    day = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28
        
//    if year % 4 == 0 && year % 100 != 0 || year % 400 == 0 {
//        day = 29
//    }else{
//     day = 28
//    }
    //如果月份为4,6,9,11则为30天
    }else if mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11 {
    day = 30
    //余下的为31天
    }else{
    day = 31
    
    }
    //输出某年某月有几天
print("\(year)年\(mouth)月有\(day)天")

猜数字的游戏

//定义一个100以内随机数为answer(由于随机数每次只产生一个,且不会改变,所以定义为常量)
let answer  = Int(arc4random_uniform(100)) + 1
//定义一个整型变量为thyAnswer(thy=your,由于你的答案一直在变,所以为变量)
var thyAnswer:Int
//定义一个计数器,来计算你用多少猜对数
var counter = 0
repeat {
//计数器加一
    counter += 1
    //输入你猜的数字
print("请输入你猜的数字:", terminator:"")
    thyAnswer = inputInt()
    //判断你的数和答案的大小
    if thyAnswer > answer {
    //如果大了提示小一点
        print("小一点")
    }else if thyAnswer < answer {
    //如果小了提示大一点
        print("大一点")
    }else {
    //否则就是猜对了
        print("恭喜你猜对了,你总共猜了\(counter)")
    }
}
//如果你的答案和标准答案不一样,则一直循环
    while thyAnswer != answer
    if counter > 7{
    //最后如果猜超过了7次,那么~~
    print("你的智商该充值了")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,102评论 4 62
  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,301评论 1 27
  • 循环语句是指让程序从某个位置开始,就连续不断的执行同一个操作。能够使程序代码重复执行。Swift编程语言支持3种循...
    博为峰51Code教研组阅读 2,027评论 0 0
  • 慢旅时,天空蔚蓝,空气清爽,心飘逸,身悠扬,世界清明,心静神怡。头顶,有小鸟在唧啾,仿佛在快乐地哼唱生活的美好;空...
    遇见明天的你阅读 129评论 2 2
  • 高中时期的好朋友在群里发消息,声称一个月后她要办结婚酒了,在南宁。还补充了一句:反正我已经提前一个月告诉你们了,你...
    赵花花老师阅读 757评论 0 50