2014-11-04 16:44:12 leihua713 阅读数 1540

前面文章写得swift第一个ios项目用xcode6.1打开有点小错误了,毕竟原先是在xcode6 beta1版本上写的,xcode6正式版本上调整了一些东西。那么在这里对原来得项目进行些调整和补充吧,仍然是纯代码。先看效果图。


















AppDelegate.swift里面得代码不用变,来看ViewController.swift

首先创建tableview和一个存放网络请求返回的数据的数组和一个用来发送异步请求的线程队列

代码如下:

var table : UITableView?

    var dataSource = []

    

    var thumbQueue = NSOperationQueue()

    

    let hackerNewsApiUrl = "http://qingbin.sinaapp.com/api/lists?ntype=%E5%9B%BE%E7%89%87&pageNo=1&pagePer=10&list.htm"



然后开始设置界面并且请求数据先吧

override func viewWillAppear(animated: Bool) {

        //请求数据

        self.loadDataSource()

        //设置界面

        self.setupViews()


    }

//设置界面,添加tableview,并且设置UITableViewDelegateUITableViewDataSource对象

    func setupViews(){

        self.table = UITableView(frame:CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height))

        self.table!.delegate = self

        self.table!.dataSource = self

        self.table!.registerClass(UITableViewCell.self, forCellReuseIdentifier:"cell")

        //tableview添加到view试图上

        self.view.addSubview(self.table!)

    }

//异步请求网络数据,并在主界面中刷新tableview数据

    func loadDataSource() {

        

        var loadURL = NSURL(string: hackerNewsApiUrl)

        var request = NSURLRequest(URL: loadURL!)

        var loadDataSourceQueue = NSOperationQueue();

        

        NSURLConnection.sendAsynchronousRequest(request, queue: loadDataSourceQueue, completionHandler: { response, data, error in

            if (error != nil) {

                println(error)

                dispatch_async(dispatch_get_main_queue(), {

                    

                    })

            } else {

                let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

                let newsDataSource = json["item"] as NSArray

                dispatch_async(dispatch_get_main_queue(), {

                    self.dataSource = newsDataSource

                    self.table!.reloadData()

                    

                    })

            }

            })

    }


别忘了在类的声明中声明tableview的两个协议

class MyViewController: UIViewController, UITableViewDelegate,UITableViewDataSource


向tableview中填充数据

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    {

        return dataSource.count;

    }

    

    

    // Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:

    // Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    {

        let cell = UITableViewCell(style:UITableViewCellStyle.Subtitle,reuseIdentifier:"cell")

        let object = dataSource[indexPath.row] as NSDictionary

        println(object)

//        cell.shouldIndentWhileEditing = true

        cell.selectionStyle = UITableViewCellSelectionStyle.None

        cell.textLabel.text = object["title"] as? String

        cell.detailTextLabel?.text = object["id"] as? String

        cell.imageView.image = UIImage(named :"defaultphotoS")

        cell.imageView.contentMode = UIViewContentMode.ScaleAspectFit

        

        let request = NSURLRequest(URL: NSURL(string: object["thumb"] as String)!)

        NSURLConnection.sendAsynchronousRequest(request, queue: thumbQueue, completionHandler: { response, data, error in

            if (error != nil) {

                println(error)

                

            } else {

                let image = UIImage.init(data :data)

                dispatch_async(dispatch_get_main_queue(), {

                    cell.imageView.image = image

                    })

            }

            })


        return cell

    }

     func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {

        return 80

    }





下一步就要设置点击cell进入新闻详情页了


这里需要说明的是新闻详情的数据是要根据新闻id号来获取的,当然这些在做具体项目的时候看接口文档就明白了


那么这里点击cell需要将新闻id号传过去,而新闻id号就存在先前请求的新闻列表的数据中,这里获取下传值到下一个viewcontroller就行了

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

        var web = NewsViewController()

        let object = dataSource[indexPath.row] as NSDictionary

        let id = object["id"] as String

        let a = id.toInt()

        web.detailID = a!

        self.navigationController?.pushViewController(web, animated: true)

    }

这里NewsViewController就是我们要创建的新闻详情的页面了,创建一个ViewController,命名为NewsViewController


里面设置个detailId来接收传过来得id值,添加个webview用来显示新闻详情

var detailID = NSInteger()

    var webView:UIWebView?

在viewDidLoad()中

 override func viewDidLoad() {

        super.viewDidLoad()

        

        self.webView = UIWebView(frame:self.view.frame)

        self.title = "新闻中心"

        self.loadData()

        self.view.addSubview(self.webView!)

        // Do any additional setup after loading the view.

    }

根据detailID的值来请求新闻详情数据,并加载到webview中

这里要注意的是,demo中提供得接口返回的新闻详情是html数据,所以可以用webview加载,如果请求返回的是别的数据请自行做处理显示

func loadData(){

        var urlStr = "http://qingbin.sinaapp.com/api/html/\(detailID).html"

        println(urlStr)

        var url = NSURL(string: urlStr)

        var urlRequest = NSURLRequest(URL :url!)

        self.webView!.loadRequest(urlRequest)

    }



好了,这里就完成了,点击运行就可以看到前面得效果,算是一个小demo了。是不是很简单。


2019-11-14 01:06:15 fengliaoai 阅读数 60

swift入门教程面向单位实际需求,资深讲师,提供实用swift课程,swift案例教学,从swift基础到项目实战,解决工作中实际问题,ios开发入门必选课程,全面学习Swift编程语言的技术体系,通过大量案例掌握Swift在项目开发中的技术要求!

swift视频课程介绍

swift怎么学?

swift视频教程目录

swift视频教程百度盘下载

swift怎么学?
swift与2014年推出,虽然简单易用,但是发展较快,更新也快,对初学者不是很适应。再有swift对原有的object-c依赖性很强,如果单学swift不学object-c的话,遇到的坑会非常多。如果非常喜欢swift做苹果的开发,建议学习swift的官方文档,有中文版,不是很难,然后在一些网课教育平台学习一些基础的小例子做练习,买一本object-c的书籍以备查询,不懂的问题勤搜索。

swift视频教程目录
第一部分 环境准备

一、苹果WWDC大会技术分析
1、本课概要
2、WWDC大会详解Swift编程语言特性介绍及运行时分析
3、WDC大会详解OSX 10.10、iOS8新特性及面向开发者的更新
4、WWDC大会详解Swift语言速度 垃圾回收机制和简单代码分析

二、Xcode6中Playground的特点和使用方法
1、本课概要
2、玩玩Xcode6 playground

第二部分 语法基础

一、Swift 基础语法
1、Swift 简介与入门
2、Swift 基本语法1
3、Swift 基本语法2
4、字典与控制流
5、Swift 函数与类

二、用Swift语言开发物理引擎游戏
1、用Xcode创建SpriteKit游戏项目
2、认识SpriteKit游戏框架
3、使用Xcode提供的场景编辑器
4、用swift语言代码编辑场景界面动态创建场景
5、用户触摸交互
6、SpriteKit物理引擎的使用

第三部分 项目实战

一、利用Swift开发天气预报应用实战项目
1、本课概要
2、天气预报swift编程语言应用开发实战项目创建
3、天气预报iOS Swift API
4、天气预报iOS用户界面交互设计
5、天气预报Swift语言应用开发实战之加载天气信息
6、天气预报ios swift Json数据格式解析
7、天气预报Swift语言开发项目呈现天气信息

二、基于SpriteKit引擎KickBall足球游戏实战开发
1、ios Swift语言中SpriteKit游戏引擎开发踢足球游戏的玩法
2、SpriteKit游戏引擎开发踢足球游戏创建swift KickBall游戏项目
3、KickBall游戏项目配置边界
4、SpriteKit开发踢足球游戏中添加足球的实现
5、KickBall游戏项目开始游戏实现
6、SpriteKit游戏引擎开发踢足球游戏的碰撞测试
7、SpriteKit开发踢足球游戏中添加国旗
8、ios SpriteKit开发踢足球添加游戏结束界面

swift视频教程百度盘下载

2016-09-12 11:58:08 CrazyZhang1990 阅读数 1111

【主要内容】

1.关于Swift

2.Hello World

3.常量和变量

4.类型标注

5.常量和变量的命名

6. 输出常量和变量

7.注释

8.分号


一、关于Swift

苹果在2014年WWDC(苹果开发者大会)发布了Swift,用于编写iOS,Mac OS X和watchOS应用程序。Swift 采用安全的编程模式并添加了很多新特性,而且对于熟悉OC人开发者来说学习Swift也很简单。是不是已经迫不及待要体验Swift了。


二、Hello World

在学习计算机每一门语言的时候第一个程序肯定都是Hello World,Swift也一样,下边来看一下Swift如何打印Hello World。

print("Hello World")
就是这么简单不需要多余的字符或者导入一个库。重要的事情说三遍:在Swift中不需要在每句的结尾加分号!在Swift中不需要在每句的结尾加分号!在Swift中不需要在每句的结尾加分号!

三、常量和变量

常量和变量应该是每一门语言里边都存在的。常量就是在定义之后就不可以再改变的量,而变量就是定义之后还可以改变他的值。那么在Swift中使用let声明常量,使用var声明变量。注意常量和变量必须在使用前声明。

下边用常量定义你的身高,用变量定义你的年龄:

//定义常量用let  用常量定义身高
    let height = 187
        
//定义变量用var  变量定义年龄
    var age = 35 
    age = 36


上边声明一个你的身高的常量height,并给它初值187,因为人的身高到一定年龄后是不会再变的。有声明一个你的年龄的变量age,赋初值35,因为年龄每年是可以变化的,今年35岁明年就36岁。

你也可以同时定义多个常量或者变量,只需要用逗号隔开:

//同时定义多个常量和变量
     let a = 10, b = 27, c = 58
     var d = 3.14, e = 6.28, f = 5.28


注意:

在Swift中如果你声明变量而没有重新改变变量的值,那么编译器会警告你:你的变量XXX永远不会改变,建议你使用let声明成常量,如图:


四、类型标注

当你声明变量或者常量的时候可以加上类型标注(type annotation),说明变量或者常量中要储存的值的类型。格式如下:

//类型标注格式:
//变量/常量 变量名/常量名:类型 = 初始值
        let number: Int = 1250
        var name: String = "Aventador"
        name = "Ferrari"


             跟普通定义不同的是,带有类型标注的声明需要在变量名/常量名后边加上一个冒号,冒号后边是类型说明。

用类型标注同样可以同时定义多个变量:

//类型标注同时定义多个变量
   var carName,carBrand,carHeight: String    
注意:
在Swift中一般很少去写类型标注,因为Swift是一门安全的语言,他有类型安全类型推断,这个会在后边提到。如果初始化声明的时候没有标注类型,系统会自动推断出变量的类型。


五、常量和变量的命名规则

5.1 你可以用任何的Unicode字符命名

5.2 不能包含数学符号、箭头、保留的(或者非法的)Unicode码位

5.3 不能用连线和制表符

5.4 不能以数字开头,但是可以再名字其他地方出现

5.5 不能重复声明变量名、常量名

你可以像下边这样命名:



六、输出常量、变量

在Swift中可以用  print(items : Any)函数来输出当前常量或者变量的值:


Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。

将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:

        print("我的第一车是\(_car)")


七、注释

Swift中注释跟OC基本一样,但是Swift要比OC功能更强。可以使用多行注释嵌套,在OC中是不可以的,如图:



八、分号

大部分编程语言在每条语句结尾的地方都需要加上分号表示结束。但是在Swift中不强制大家必须写分号,不写没有任何问题,但是写了也不错。

但是有一种情况必须写分号,就是想要在一行中执行多条语句的时候,如图:



欢迎大家关注”芒果iOS“微信公众账号,芒果会经常为大家分享好的技术文章:


2015-12-28 19:32:24 hero_wqb 阅读数 806

Swift 简介:

       Swift是Apple公司在WWDC2014上发布的一门编程语言,其创造者是苹果开发者工具部门总监Chirs Lattner。是一门用来编写OS X和iOS应用程序的语言,建立在C语言和Objective-C语言基础之上,没有C语言的兼容性限制,采用安全模型的编程架构模式,使整个编程过程更加容易和灵活。并且完全支持主流框架:Cocoa和Cocoa Touch框架。Swift的开发结合了众多工程师的心血,同时也借鉴了Objective-C、Rust、Ruby等其他语言的优点。其核心吸引力在于XCode Playgrounds功能和REPL,它们使开发过程具有更好的交互性,也更容易上手。

Swift 优势:

  • 易学:Swift语言的语法内容混合了Objective-C、JS和Python,语法简单、使用方便、容易学习。
  • 功能强大:通过更简洁的代码来实现更多内容,在WWDC2014发布会上,苹果演示了如何只通过一行简单代码,完成一个完整图片列表加载的过程。另外,Swift还可以让开发人员一边编写程序,一边预览自己的应用程序,从而快速测试应用在某些特殊情况下的反应。
  • 提升性能:降低开发难度的同时Swift语言保证性能的提升。
  • 执行速度快:Swift的执行速度比Objective-C应用更快,可以拥有更好的特效,更快的响应性,得到更满意的用户体验。
  • 简洁:Swift是一门非常简洁、精良、高效的语言,与Python类似,不必编写大量代码即可实现强大的功能,提高开发速度。
  • 全面融合:开发者可以在同一款软件中同时使用Objective-C、Swift、C 3种语言。
  • 测试便捷:方便快捷地测试所编写的应用。

基本数据类型:

  • int 类型:整型,Swift语言的基本数据类型。
  • float 类型:浮点数,即包含小数位的值。
  • double 类型:浮点数,精度是float类型的两倍。
  • char 类型:字符,如字母'a'、数字字符'3'、叹号'!'。注意,'3'表示字符3,并不等同于数字3 。
  • 常量:程序执行过程中,其值不发生改变的量,用关键字“let”定义常量。如let width = 50、let width:Double = 50。
  • 变量:用关键字“var”定义变量。如var name = "swift"。
  • 字符串:String是一个有序的字符集合,如"hello world"、"swift"。在Swift程序中,字符串连接操作只需要简单地通过“+”号将两个字符串相连即可。如:

let string1 = “hello”

let string2 = “ world”

let string3 = string1 + string2    //等于"hello world"

流程控制:

       Swift程序中的语句是顺序执行的。要将流程导向到其他地方去做事情,可用如下流程控制语句:

  • for循环:
  1. for-in循环:对于数据范围、序列、集合等中的每一个元素,都执行一次。
  2. for-condition-increment:一直执行,直到一个特定的条件满足,每执行一次循环,增加一次计数。
  • while循环:
    1. while循环:在每次循环开始前测试循环条件是否成立。
    2. repeat-while循环:在每次循环之后测试循环条件是否成立,循环体中语句先被执行一次。
  • if条件语句:条件为true时,执行if语句块中的语句。
  • switch选择判断语句:包含多个case语句块,通过比较决定执行哪一个分支的代码。
  • 函数调用:跳入函数体中的代码,当该函数返回时,程序从函数调用之后的位置开始执行。

函数:

       函数是执行特定任务的代码块,给定一个函数名称标识,当需要执行任务时就可以调用这个标识。定义一个函数时,可以为其定义一个或多个命名,定义类型值作为函数的参数,当该函数完成时将传回输出定义的类型。函数定义时,以func关键字为前缀,->指定返回值类型。

2018-04-13 10:21:49 feng_hui_lu_zhuan 阅读数 605


一.语言环境是swif4下;

二.可以下载源码然后把TBCalender文件夹拖进自己的项目中即可使用,源码地址

三.使用步骤:

1.需要使用的项目配置Pods环境或者手中下载相应第三方库使用,依赖:YYKit、SnapKit

2.把文件夹Extension下的Foundation+Extension.swift文件拉进项目,此文件中写一些类扩展和方法;

3.在你的项目中直接使用即可,相似下图p1


p1

4.相关日历的配置在TBCalendarAppearStyle.swift类中,可根据需求自己更改

5.具体的可以直接查看项目

6.写的不好,多谢提及意见,谢谢!

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