小程序和swift
2016-07-20 20:16:00 weixin_33859504 阅读数 73

纯代码版

没有多少注释,请谅解
//第一次修改:"+/-"按键在某种情况下无效BUG


2446853-199bc77d1272fbd9.png
UI图
//
//  ViewController.swift
//  uiTest
//
//  Created by Input on 16/7/20.
//  Copyright © 2016年 Input. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    let outputLabel = UILabel()
    let dicIntStr  = [ 11: "AC",  12: "DEL", 13: "%",   14: "/",
                       21: "7",   22: "8",   23: "9",   24: "*",
                       31: "4",   32: "5",   33: "6",   34: "-",
                       41: "1",   42: "2",   43: "3",   44: "+",
                       51: "0",   52: ".",   53: "+/-", 54: "=" ]
    
    var strOne = "0", strTwo = "", ch = "=";
    //接受运算符事件函数
    func testOperation (operation str : String) -> Void {
        var sum :Double = 0.0
        if strTwo.isEmpty {
            strTwo = strOne;
        }
        else if ch != "=" && !strOne.isEmpty {
            switch ch {
            case "+":
                sum = (Double)(strTwo)! + (Double)(strOne)!
            case "-":
                sum = (Double)(strTwo)! - (Double)(strOne)!
            case "*":
                sum = (Double)(strTwo)! * (Double)(strOne)!
            case "/":
                sum = (Double)(strTwo)! / (Double)(strOne)!
            default:
                break
            }
            strTwo = (String)(sum)
        }
        if strTwo == "0.0" { strTwo = "0" }
        ch = str; outputLabel.text = strTwo; strOne = "0";
    }
    //数字接受事件函数
    func inputNumber (numberCharcter number : String ) -> Void {
        if ch == "=" {
            strTwo = ""
        }
        if !strOne.isEmpty{
            if strOne[strOne.characters.startIndex] == "0" && !strOne.containsString(".") {
                strOne = ""
            }
        }
        strOne += number; outputLabel.text = strOne;
    }
    func idDButton() {
        if ch == "=" {
            strTwo = ""
        }
        let count = strOne.containsString(".")
        if !count {
            if strOne.isEmpty{
                strOne += "0."
            }
            else{
                strOne += "."
            }
        }
        outputLabel.text = strOne
    }
    
    func id0Button() {
        if ch == "=" {
            strTwo = ""
        }
        if !strOne.isEmpty {
            if strOne[strOne.characters.startIndex] == "0" {
                if strOne.containsString(".") {
                    strOne += "0"
                }
            }
            else {
                strOne += "0"
            }
        }
        else {
            strOne += "0"
        }
        outputLabel.text = strOne;
    }
    
    //清除缓存,重新开始计算
    func idACButton() {
        strOne = "0"; strTwo = ""; ch = "="
        
        outputLabel.text = strOne;
    }
    //取反
    func idXFButton() {
        if !strTwo.isEmpty && ch == "="{
            if strTwo != "0" {
                if strTwo[strTwo.characters.startIndex] == "-"{
                    strTwo.removeAtIndex(strTwo.characters.startIndex)
                }
                else {
                    strTwo.insert("-", atIndex: strTwo.characters.startIndex)
                }
                outputLabel.text = strTwo
            }
        }
        else{
            if !strOne.isEmpty && (strOne != "0" && strOne != "0."){
                if strOne[strOne.characters.startIndex] == "-"{
                    strOne.removeAtIndex(strOne.characters.startIndex)
                }
                else {
                    strOne.insert("-", atIndex: strOne.characters.startIndex)
                }
                outputLabel.text = strOne
            }
        }
    }
    //取百分数
    func idQYButton() {
        //调用计算函数:
        if strTwo.isEmpty{
            strTwo = strOne
        }
        else{
            testOperation(operation: "=")
        }
        ch = "/"; strOne = "100"
        testOperation(operation: "=")
    }
    //Del事件
    func idDelButton(){
        if !strOne.isEmpty && strOne != "0" {
            strOne = strOne.substringToIndex(strOne.endIndex.predecessor())
            if strOne.isEmpty { strOne = "0" }
        }
        if strOne == "-" {strOne = "0"}
        outputLabel.text = strOne
    }
    func funtest(tag :UIButton) {
        let T = (Int)(tag.tag)
        
        switch T {
        case 21, 22, 23, 31, 32, 33, 41, 42, 43:
            inputNumber(numberCharcter: "\((4 - T/10 )*3 + T%10)")
        case 14, 24, 34, 44, 54:
            testOperation(operation: dicIntStr[T]!)
        case 51:
            id0Button()
        case 52:
            idDButton()
        case 11:
            idACButton()
        case 13:
            idQYButton()
        case 53:
            idXFButton()
        case 12:
            idDelButton()
        default:
            break
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad(); view.backgroundColor = UIColor.init(red: 0.8, green: 0.7, blue: 0.6, alpha: 1)
        
        let wiDth = UIScreen.mainScreen().bounds.width,heiGht = UIScreen.mainScreen().bounds.height
        let butWidth = (wiDth - 9)/4, butHeight = 0.65*heiGht/5 - 3
        
        let tile = UILabel()
        
        tile.text = "简单计算器"; tile.frame = CGRectMake(0, 20, wiDth, 0.07*heiGht)
        tile.textAlignment = .Center;tile.backgroundColor = UIColor.init(red: 0.9, green: 0.5, blue: 0.3, alpha: 1)
        self.view.addSubview(tile)
        
        outputLabel.font = UIFont.systemFontOfSize(72)
        outputLabel.textAlignment = .Right;
        outputLabel.backgroundColor = UIColor.greenColor()
        outputLabel.adjustsFontSizeToFitWidth = true;
        outputLabel.text = "0"
        outputLabel.frame = CGRectMake(0, 0.1*heiGht, wiDth, 0.25*heiGht)
        self.view.addSubview(outputLabel)
        
        for i in 1 ..< 6 {
            for j in 1 ..< 5 {
                let button = UIButton()
                
                button.frame = CGRectMake((CGFloat)(j - 1)*(butWidth + 3), 0.35*heiGht + ((CGFloat)(i) - 1)*(butHeight + 3) + 3, butWidth, butHeight)
                button.tag = i*10 + j; button.setTitle(dicIntStr[button.tag], forState: .Normal)
                button.setTitleColor(UIColor.blackColor(), forState: .Highlighted)
                button.backgroundColor = UIColor.redColor()
                button.addTarget(self, action: #selector(funtest), forControlEvents: .TouchUpInside)
                
                self.view.addSubview(button)
            }
        }
    }    
}
2017-10-22 19:04:16 J_mine 阅读数 1036

(1) 编写一个程序,能交换两个变量的数值
例如: 变量a值为20,变量b值为30,调用函数后,a的值变为30,b 的值变为20

答案:   -func swap(a: inout Int , b:inout Int){
            let temp = a
             a = b
            b = temp
        }
        var x = 20 , y = 30
        swap(a:&x , b:&y)
        print(x,y)

(2) 编写一个程序,求1! + 2! + 3! + 4!的和
要求:使用嵌套定义函数实现

答案: func getSum(number: Int) -> Int {
    //求某个数阶乘的结果
    func getFactorIal(num: Int) -> Int {
        var sum = 1
        for _ in 1...num {
            sum += 1
        }
        return sum
    }
    var total = 0
    for item in 1...number {
        total += getFactorIal(num: item)
    }
    return total
}
print(getSum(number: 3))

(3) 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

答案:func getFinboNum(num: Int) ->Int{
            if num == 1 || num == 2 {
             return 1
            }
        return (getFinboNum(num: num - 1) + getFinboNum(num: num - 2))
}
for month in 1...10{
    print("\(month):\(getFinboNum(num: month))")
}

(4) 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方

答案 :for number in 100...999{
    var hunder = number / 100
    var ten = number / 10 % 10
    var num = number % 10
   let sum = pow(Decimal(hunder), 3) + pow(Decimal(ten), 3) +  pow(Decimal(num), 3)
    if sum == Decimal(number){
        print(number)
    }
}   

(5) 编写一个程序,要求可以把一个字符串中的每一个字符,如果是大
写字母变小写字母,如果是小写字母变大写,如果是其他字符不变
例如: 字符串China23beiJing 经过程序转换为cHINA23BEIjING

答案:
/*
 函数,将大写字母变小写,小写字母变大写,其他不变
 */
func changeCharcter (chNum:Character) -> Character {
    //将字符转成整数

    var chStr = String(chNum)   //将字符转成字符串
    var num:UInt32 = 0  //用于接受字符整数值的变量
    for item in chStr.unicodeScalars {
        num = item.value    //循环只执行一次,获取字符的整数的值

    }
    /*
     如果是大小写字母,转换数值
     */
    //如果是大写字母
    if num >= 65 && num <= 90 {
        num += 32
    }
        //如果是小写字母
    else if num >= 97 && num <= 122 {
        num -= 32
    }
    /*
     将整数转换为字符
     */
    let newChNum = Character(UnicodeScalar(num)!)
    return newChNum

}
var str = "China23beiJing "
var i = 0   //表示偏移量(循环变量初始值)
while i < str.characters.count {    //循环条件,包含循环变量的终止值
    var str1 = str[str.index(str.startIndex, offsetBy: i)]
//    str1 = changeCharcter(chNum: str1)

    str.replaceSubrange(str.index(str.startIndex, offsetBy:
        i)...str.index(str.startIndex, offsetBy: i),
                           with: String(changeCharcter(chNum: str1)))
    i+=1;   //循环变量值变化
}
print(str)

(6) 编写一个程序,要求接收一个数字,程序会将这个数字以二进制方
式打印,例如:数字10 , 以1010的方式打印出来

答案 :
    func binaryPrintIntNumber(num : Int) {

    var remainderArr:[Int] = []  //int数组,存储余数
    var quotient:Int = num  //表示商的变量,初始值是num
    while quotient > 0 {   //商的值是0
        let remainderNum = quotient % 2 //获取余数的值
        remainderArr.insert(remainderNum, at: 0)    //插入数组
        quotient /= 2   //商变换
    }
    for item in remainderArr {
        print(item, terminator: "")
    }
    print("")
}

var a = 10
binaryPrintIntNumber(num: a)
print(a)

(7) 编写一个程序,判断101-200之间有多少个素数,并输出所有素数

答案:
    var isPreimNum = true   //判断是否是素数,是就是true不是就是false
var sum = 0
for item in 101...200 {     //遍历101到200中的任意数
    for j in 2..<item {     //判断item是不是素数
        if item % j == 0 {
            isPreimNum = false
            break
        }
    }
    if isPreimNum {     //如果是素数
        print(item)     //打印这个素数
        sum += 1
    }
    isPreimNum = true

}
print(sum)}

(8) 编写一个程序,查看1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

var sum1 = 0  //定义变量用于记录个数

for hudder in 1...4 {   //百位
    for ten in 1...4 {  //十位
        for num in 1...4 {  //个位
            if hudder != ten && hudder != num && ten != num {
                print(hudder*100 + ten*10 + num)
                sum1 += 1   //计算个数
            }
        }
    }
}

print(sum1)
2015-02-21 18:08:59 weixin_33845881 阅读数 15

       在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。新建一个工程,命名为Weather,然后上网找一个天气预报的API,百度搜索“天气预报 api”,打开一个网站,如下图:

  

我们最好找json的格式的api,比如这样的



找到API之后,我们来制作一个用户界面,打开storyboard,加载一个按钮,命名为北京的天气信息:



    在按钮下方加一个text view来呈现天气信息:


       现在添加一个按钮的点击事件,打开ViewController,输入以下代码:

 @IBAction func btnPressed(sender:AnyObject){
    println("Button Clicked")
    }
 
       再回到storyboard中,右键点击,把Touch up inside拖到view controller中可以看到我们刚刚定义的btnPressed,点击关联,效果如下:



运行看一下效果,点击按钮,显示:


     然后我们来加载天气信息,为了让我们的程序更好,在工程中建立一个playground,targets勾选Weather,建好的playground如图:


   playground中的代码如下:

var url = NSURL(string: "http://api.k780.com:88/?app=weather.today&weaid=1&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json")
var data:NSData = NSData(contentsOfURL: url!, options: NSDataReadingOptions.DataReadingUncached, error: nil)!
var str = NSString(data: data, encoding: NSUTF8StringEncoding)

    接着我们来解析JSON,使用swift自带的解析工具,代码如下:


var json: AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil)

var weatherInfo: AnyObject? = json?.objectForKey("result")
var city = weatherInfo?.objectForKey("citynm")

     效果如图:


可以从右边看到我们得到了Json中的城市信息,补全我们需要的所有信息:

var city = weatherInfo?.objectForKey("citynm")

var temp = weatherInfo?.objectForKey("temperature")

var day = weatherInfo?.objectForKey("days")

   现在我们在ui中呈现天气信息,把刚才playground中写的部分拷贝,然后在viewcontroller中新建一个方法loadWeather,把代码拷进去,再在viewDid方法中调用loadWeather,最后增加一个IBOutlet与storyboard相关联,方法依旧是拖动,拖动storyboard中的New Referencing Outlet与tv相关联。然后在btnPressed方法中依旧增加loadWeather方法.

    在loadWeather方法中加上信息的显示语句:

 tv?.text = "城市:\(city)\n温度:\(temp)\n日期:\(day)"

运行一下看看效果,如图:


    虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:



     大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

2015-02-21 18:08:59 cg1991130 阅读数 7605

       在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。新建一个工程,命名为Weather,然后上网找一个天气预报的API,百度搜索“天气预报 api”,打开一个网站,如下图:

  

我们最好找json的格式的api,比如这样的



找到API之后,我们来制作一个用户界面,打开storyboard,加载一个按钮,命名为北京的天气信息:



    在按钮下方加一个text view来呈现天气信息:


       现在添加一个按钮的点击事件,打开ViewController,输入以下代码:

 @IBAction func btnPressed(sender:AnyObject){
    println("Button Clicked")
    }
 
       再回到storyboard中,右键点击,把Touch up inside拖到view controller中可以看到我们刚刚定义的btnPressed,点击关联,效果如下:



运行看一下效果,点击按钮,显示:


     然后我们来加载天气信息,为了让我们的程序更好,在工程中建立一个playground,targets勾选Weather,建好的playground如图:


   playground中的代码如下:

var url = NSURL(string: "http://api.k780.com:88/?app=weather.today&weaid=1&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json")
var data:NSData = NSData(contentsOfURL: url!, options: NSDataReadingOptions.DataReadingUncached, error: nil)!
var str = NSString(data: data, encoding: NSUTF8StringEncoding)

    接着我们来解析JSON,使用swift自带的解析工具,代码如下:


var json: AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil)

var weatherInfo: AnyObject? = json?.objectForKey("result")
var city = weatherInfo?.objectForKey("citynm")

     效果如图:


可以从右边看到我们得到了Json中的城市信息,补全我们需要的所有信息:

var city = weatherInfo?.objectForKey("citynm")

var temp = weatherInfo?.objectForKey("temperature")

var day = weatherInfo?.objectForKey("days")

   现在我们在ui中呈现天气信息,把刚才playground中写的部分拷贝,然后在viewcontroller中新建一个方法loadWeather,把代码拷进去,再在viewDid方法中调用loadWeather,最后增加一个IBOutlet与storyboard相关联,方法依旧是拖动,拖动storyboard中的New Referencing Outlet与tv相关联。然后在btnPressed方法中依旧增加loadWeather方法.

    在loadWeather方法中加上信息的显示语句:

 tv?.text = "城市:\(city)\n温度:\(temp)\n日期:\(day)"

运行一下看看效果,如图:


    虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:



     大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

2017-05-09 18:08:53 itbsl 阅读数 2506

苹果公司在2014年的世界开发者大会(WWDC2014)上推出了一门新的开发语言Swift,截止到目前Swift的版本已经更行到2.2版本了,Swift正在不断的完善,在今年的6月份苹果将推出Swift3.0版本,这将又是一重大更新,苹果能否再一次改变世界呢,让我们拭目以待.......

自从苹果公司推出Swift语言后,许多同学都跃跃欲试,想学习一下苹果新推出的这门语言,但是由于Xcode只能运行在Mac系统上,而Mac电脑又比较贵,导致许多同学不得不放弃尝鲜。

然而幸运的是,IBM公司推出了网页版的Swift学习工具IBM Swift Sandbox,说是工具也不太准确,因为它只是一个网页,实质是我们在该网页敲代码,提交到IBM的服务器,IBM的服务器把运行结果显示给我们。

其实IBM公司早就推出了这个功能,只是很少人知道而已。奉上该网页的截图,嗯,还挺好看的。左边是代码区,右边是结果输出区。


IBM是美国的一家公司,由于某种未知的原因,如果不借助一些工具,我们是无法登上该网站的。所以这里奉上一个工具: 灯笼,这是个压缩包,里面包含Mac版和PC版。

众所周知,Swift语言是不向下兼容的,有些原来可用的方法或属性有时会在新的Swift版本推出后被废弃掉,比如,标准输出函数以前可以用print()、println(),但是现在只能用print()了。所以学习Swift语言最好用最新的编译器,正好IBM一直采用的是最新的编译器(你可以看到IBM现在采用的是还没正式推出的Swift3.1版本的编译器)来运行我们的程序并把结果输出给我们,如果程序有错误,它还会输出错误信息,便于我们修改。给IBM点个赞吧。

下面用GIF图来演示一下用IBM Swift Sandbox运行一个小程序。



好啦,就介绍到这里啦,IBM Swift Sandbox上的一些功能就交给你自己去尝试了,尽情的在PC上学习Swift吧。you will enjoy it!!!

swift 小知识

阅读数 140

Swift 小知识点

阅读数 20

swift小测试

阅读数 41

Swift 小知识点

阅读数 7

没有更多推荐了,返回首页