怎么用swift写一个软件_swift写一个弹出框 - CSDN
  • 多年后的今天,我仍希望以HelloWorld作为第一步,与大家共同开启一个神奇、瑰丽的世界——Swift编程。本章以HelloWorld作为切入点,向大家系统介绍如何使用Xcode的Playground编写和运行Swift程序代码。编写和运行...

    从控制台输出“HelloWorld”是我学习C语言的第一步,也是我人生中非常重要的一步。多年后的今天,我仍希望以HelloWorld作为第一步,与大家共同开启一个神奇、瑰丽的世界——Swift编程。

    本章以HelloWorld作为切入点,向大家系统介绍如何使用Xcode的Playground编写和运行Swift程序代码。

    编写和运行Swift程序有多种方式,我们可以通过在Xcode中创建一个iOS或Mac OS X工程来实现,也可以通过使用Xcode6提供的Playground来实现。在学习阶段,我推荐大家使用Playground工具编写和运行Swift程序。

    编程利器Playground

    Playground离不开Xcode6,它是苹果在Xcde6中添加的新功能。使用Xcode创建工程编写和运行程序,目的是为了使最终的程序编译和发布,而使用Playground的目的是为了学习、测试算法、验证想法和可视化地看到运行结果。

    下图所示是一个Playground程序运行界面,其中①区域是代码编写区域,②区域是运行结果区域,③区域是时间轴(timeline)区域。时间轴可以查看程序从上到下按照时间运行的结果,不同时间阶段运行的结果可以通过文本、图形和曲线图表等方式展示给开发人员。


    Playground界面

    编写HelloWorld程序

    下面我们具体介绍如何使用Playground编写HelloWorld程序。首先,打开Xcode6的欢迎界面(如图2-2所示)。一般第一次启动Xcode6就可以看到这个界面,如果没有,可以通过菜单Windows→Welcome to Xcode打开。

    在上图所示的欢迎界面中,单击“Get started with playground”弹出如下图所示的对话框。在这个对话框中,我们可以修改Playground文件名以及要保存的目录。完成之后可以单击“Create”按钮创建Playground,创建成功后界面如图所示。

    我们在上图所示的界面就可以编辑了,其中模板已经生成了一些代码,修改代码如下:

    import Cocoa

     

    var str ="Hello World"

    println(str)

    代码修改完成后,马上就会编译运行,但是我们在右边只能看到str变量情况,不能看到println输出结果,如图2-5所示。此时可以单击“Hello World”后面的“Value History”按钮,打开时间轴,如下图图所示。


    从上图所示的时间轴可以看到输出的结果。其中,Console Output是println函数的输出结果。

    我们还可以通过助手编辑器打开Playground时间轴界面,具体操作过程如下图所示。右键单击标题栏,在菜单中选中“Icon and Text”,然后在出现的工具栏中,单击打开助手编辑器。在助手编辑器中也有时间轴界面。


    代码解释

    Swift实现HelloWorld的方式比C和Objective-C等语言的实现要简单得多,下面我们详细解释一下代码。

    1. import Cocoa语句

    import Cocoa表示引入Cocoa框架,类似于Objective-C中的#import和C中的#include。至于后面引入何种Cocoa框架,就需要我们查找API来确定了。就本例而言,我们根本不需要Cocoa框架,不过导入也没关系。

    2. var str = "Hello World"

    声明str变量,var表示声明变量。在var中并不能看出变量是什么类型,但Swift可以通过赋值的类型推断出变量的类型。由于我们赋值的是"Hello World"字符串,因此可知str是字符串变量。我们还应该注意到语句结束时没有出现像C和Objective-C等语言结束时的分号(;)。

    3. println(str)

    println是一个函数,能够将变量或量输出到控制台,类似于C中的println函数和Objective-C中的NSLog函数。有关格式化输出的问题我们会在后面再介绍。

    这样我们通过短短的3行代码实现了一个HelloWorld输出的功能,事实上我们还可以写得更少。

     


    更多内容请关注国内第一本Swift图书《Swift开发指南》
    本书交流讨论网站:http://www.51work6.com/swift.php
    欢迎加入Swift技术讨论群:362298485

    欢迎关注智捷iOS课堂微信公共平台



    展开全文
  • 用Swift写服务端 — Perfect框架学习(、Perfect简介Perfect是组完整、强大的工具箱、软件框架体系和Web应用服务器,可以在Linux、iOS和macOS (OS X)上使用。该软件体系为Swift工程师量身定制了整套用于...

    用Swift写服务端 — Perfect框架学习(一)

    一、Perfect简介

    Perfect是一组完整、强大的工具箱、软件框架体系和Web应用服务器,可以在Linux、iOS和macOS (OS X)上使用。该软件体系为Swift工程师量身定制了一整套用于开发轻量、易维护、规模可扩展的Web应用及其它REST服务的解决方案,这样Swift工程师就可以实现同时在服务器和客户端上采用同一种语言开发软件项目。

    由于建立在一个高性能异步网络引擎基础上,Perfect还能够在FastCGI上运行,支持安全套接字加密(SSL)。该软件体系还包含很多其它互联网服务器所需要的特点,包括WebSockets和iOS消息推送,而且很快会有更多强大的功能支持。


    无论您是资深程序员还是入门级的软件工程师,本文都能够帮助您快速启动Perfect实现服务器项目开发运行。

    二、Perfect项目快速上手

    1.编译入门项目

    我们在Perfect官网的git上直接下载一个入门项目。编译后就可以启动一个本地的服务,监听你的8181端口:

    git clone https://github.com/PerfectlySoft/PerfectTemplate.git
    cd PerfectTemplate
    swift build
    .build/debug/PerfectTemplate



    我们可以在控制台看到以下内容:

    Starting HTTP server on 0.0.0.0:8181 with document root ./webroot

    服务器现在已经运行并等待连接。从浏览器打开http://localhost:8181/ 可以看到欢迎信息。


     在终端控制台中输入组合键“control-c”可以随时终止服务器运行。


    2.Xcode管理

    Swift软件包管理器(SPM)能够创建一个Xcode项目,并且能够运行PerfectTemplate模板服务器,还能为您的项目提供完全的源代码编辑和调试。在您的终端命令行内输入:

    swift package generate-xcodeproj

    然后打开产生的文件“PerfectTemplate.xcodeproj”,确定选择了可执行的目标文件,并选择在“我的Mac”运行。现在您可以运行并调试服务器了。



    直接运行XCode,然后在浏览器中输入0.0.0.0:8181也是能直接运行的!

    三、搭建HTTP服务器

    编辑main.swift文件

    import PerfectLib
    import PerfectHTTP
    import PerfectHTTPServer
    
    //HTTP服务
    var routesArr = [Dictionary<String, Any>]()
    
    var someDict1 : [String:String] = ["method":"GET","url":"/api"]
    
    routesArr.append(someDict1)
    
    let networkServer = NetworkServerManager(root: "webroot", port: 8080, routesArr: routesArr)
    
    networkServer.startServer()
    创建NetworkServerManager.swift文件

    //
    //  NetworkServerManager.swift
    //  PerfectTemplatePackageDescription
    //
    //  Created by ZFJ on 2018/1/9.
    //
    
    import PerfectLib
    import PerfectHTTP
    import PerfectHTTPServer
    
    open class NetworkServerManager {
        fileprivate var server: HTTPServer
        internal init(root: String, port: UInt16, routesArr: Array<Dictionary<String, Any>>) {
            server = HTTPServer.init()                             //创建HTTPServer服务器
            for dict: Dictionary in routesArr {
                let baseUri : String = dict["url"] as! String      //跟地址
                let method : String = dict["method"] as! String    //方法
                var routes = Routes.init(baseUri: baseUri)         //创建路由器
                let httpMethod = HTTPMethod.from(string: method)
                configure(routes: &routes, method: httpMethod)     //注册路由
                server.addRoutes(routes)                           //路由添加进服务
            }
            server.serverName = "localhost"                        //服务器名称
            server.serverPort = port                               //端口
            server.documentRoot = root                             //根目录
            server.setResponseFilters([(Filter404(), .high)])      //404过滤
        }
        
        //MARK: 开启服务
        open func startServer() {
            do {
                print("启动HTTP服务器")
                try server.start()
            } catch PerfectError.networkError(let err, let msg) {
                print("网络出现错误:\(err) \(msg)")
            } catch {
                print("网络未知错误")
            }
            
        }
        
        //MARK: 注册路由
        fileprivate func configure(routes: inout Routes,method: HTTPMethod) {
            routes.add(method: .get, uri: "/selectUserInfor") { (request, response) in
                let path = request.path
                print(path)
                let jsonDic = ["hello": "world"]
                let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: jsonDic)
                response.setBody(string: jsonString)                           //响应体
                response.completed()                                           //响应
            }
            
    //        if method == .get{
    //            //get请求
    //        }else if method == .post{
    //            //post请求
    //            let postParams = request.postParams
    //            print(postParams)
    //        }
        }
        
        //MARK: 通用响应格式
        func baseResponseBodyJSONData(code: Int, message: String, data: Any!) -> String {
            var result = Dictionary<String, Any>()
            result.updateValue(code, forKey: "code")
            result.updateValue(message, forKey: "message")
            if (data != nil) {
                result.updateValue(data, forKey: "data")
            }else{
                result.updateValue("", forKey: "data")
            }
            guard let jsonString = try? result.jsonEncodedString() else {
                return ""
            }
            return jsonString
        }
        
        //MARK: 404过滤
        struct Filter404: HTTPResponseFilter {
            func filterBody(response: HTTPResponse, callback: (HTTPResponseFilterResult) -> ()) {
                callback(.continue)
            }
            func filterHeaders(response: HTTPResponse, callback: (HTTPResponseFilterResult) -> ()) {
                if case .notFound = response.status {
                    response.setBody(string: "404 文件\(response.request.path)不存在。")
                    response.setHeader(.contentLength, value: "\(response.bodyBytes.count)")
                    callback(.done)
                } else {
                    callback(.continue)
                }
            }
            
        }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    运行结果




    接口访问


    四、搭建MySql服务器

    我的电脑上安装的有Homebrew,所以我直接通过Homebrew安装MySql,安装命令:

    brew install mysql

    配置MySql

    #开启MySQL服务
    mysql.server start
    #初始化MySQL配置向导
    mysql_secure_installation
    我电脑上数据库已经而配置好了,这里面我就不演示了,如果有不了解的可以加我QQ或者QQ群;


    五、安装Navicat Premium

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。


    Navicat Premium_12.0.22破解版下载


    这里面下载好了以后会让你输入安装密码,密码为:xclient.info 

    如下图:


    安装成功以后如果打开出现如下图的错误,只需要在终端输入以下代码就好;


    执行以下命令开启
    sudo spctl --master-disable


    这样就可以打开了,然后链接MySQL数据库,如下图


    然后创建数据库userInforsTable,然后创建了一个userTable表,并向userTable表中添加了三条数据;如下图:


    这样你就可以操作MySQL数据库了,当然你也可以通过终端直接操作数据库;


    六、编辑Perfect服务端

    创建DataBaseManager.swift数据库管理类,在这里我们对数据库进行增删改查操作;

    //
    //  DataBaseManager.swift
    //  PerfectTemplatePackageDescription
    //
    //  Created by ZFJ on 2018/1/17.
    //
    
    import MySQL
    
    //MARK: 数据库信息
    let mysql_host = "127.0.0.1"
    let mysql_user = "root"
    let mysql_password = "12345678"
    let mysql_database = "userInforsTable"
    
    //MARK: 表信息
    let userTable = "userTable"                    //用户信息表
    
    open class DataBaseManager {
        fileprivate var mysql : MySQL
        internal init() {
            mysql = MySQL.init()                       //创建MySQL对象
            guard connectDataBase() else{            //开启MySQL连接
                return
            }
        }
        
        //MARK:开启链接
        private func connectDataBase() -> Bool{
            let connected = mysql.connect(host: mysql_host, user: mysql_user, password: mysql_password, db: mysql_database)
            guard connected else{
                print("MySql链接失败" + mysql.errorMessage())
                return false
            }
            print("MySql链接成功")
            return true
        }
        
        //MARK: 执行SQL语句
        /// 执行SQL语句
        ///
        /// - Parameter sql: sql语句
        /// - Returns: 返回元组(success:是否成功 result:结果)
        @discardableResult
        func mysqlStatement(_ sql:String) -> (success:Bool,mysqlResult:MySQL.Results?,errorMsg:String) {
            guard mysql.selectDatabase(named:mysql_database) else {
                //指定操作的数据库
                let msg = "未找到\(mysql_database)数据库"
                print(msg)
                return(false, nil, msg)
            }
            
            let successQuery = mysql.query(statement:sql) //sql语句
            guard successQuery else{
                let msg = "SQL失败:\(sql)"
                print(msg)
                return(false, nil, msg)
            }
            let msg = "SQL成功:\(sql)"
            print(msg)
            return (true, mysql.storeResults(), msg)                            //sql执行成功
        }
        
        /// 增
        ///
        /// - Parameters:
        ///   - tableName: 表
        ///   - keyValueDict: 键:值 对字典
        func insertDataBaseSQL(tableName:String, keyValueDict:Dictionary<String, Any>) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
            var keys: [String] = []
            var values: [String] = []
            for (key, value) in keyValueDict {
                if let str = value as? String {
                    keys.append(key)
                    values.append(str)
                }
            }
            let fieldNameAll: String = keys.joined(separator: ",")
            let valueAll: String = values.joined(separator: ",")
            let SQL = "insert into \(tableName)(\(fieldNameAll)) values(\(valueAll))"
            return mysqlStatement(SQL)
        }
        
        /// 删
        ///
        /// - Parameters:
        ///   - tableName: 表
        ///   - key: 键
        ///   - value: 值
        func deleteDatabaseSQL(tableName: String, key: String, value: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
            
            let SQL = "DELETE FROM \(tableName) WHERE \(key) = '\(value)'"
            return mysqlStatement(SQL)
            
        }
        
        /// 改
        ///
        /// - Parameters:
        ///   - tableName: 表
        ///   - keyValue: 键值对( 键='值', 键='值', 键='值' )
        ///   - whereKey: 查找key
        ///   - whereValue: 查找value
        func updateDatabaseSQL(tableName: String, keyValue: String, whereKey: String, whereValue: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
            
            let SQL = "UPDATE \(tableName) SET \(keyValue) WHERE \(whereKey) = '\(whereValue)'"
            return mysqlStatement(SQL)
            
        }
        
        /// 查所有
        ///
        /// - Parameters:
        ///   - tableName: 表
        ///   - key: 键
        func selectAllDatabaseSQL(tableName: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
            
            let SQL = "SELECT * FROM \(tableName)"
            return mysqlStatement(SQL)
            
        }
        
        /// 查
        ///
        /// - Parameters:
        ///   - tableName: 表
        ///   - keyValue: 键值对
        func selectAllDataBaseSQLwhere(tableName: String, keyValue: String) -> (success: Bool, mysqlResult: MySQL.Results?, errorMsg: String) {
            
            let SQL = "SELECT * FROM \(tableName) WHERE \(keyValue)"
            return mysqlStatement(SQL)
            
        }
        
        //获取表中所有数据
        func mysqlGetHomeDataResult() -> [Dictionary<String, String>]? {
            let result = selectAllDatabaseSQL(tableName: userTable)
            var resultArray = [Dictionary<String, String>]()
            var dic = [String:String]()
            result.mysqlResult?.forEachRow(callback: { (row) in
                dic["userid"] = row[0]
                dic["userNumber"] = row[1]
                dic["userName"] = row[2]
                dic["userSex"] = row[3]
                dic["userBirthday"] = row[4]
                resultArray.append(dic)
            })
            return resultArray
            
        }
    }
    

    然后在NetworkServerManager中调用DataBaseManager,注册子路由/selectUserInfor查询用户表里的所以信息;

        //MARK: 注册路由
        fileprivate func configure(routes: inout Routes,method: HTTPMethod) {
            routes.add(method: .get, uri: "/selectUserInfor") { (request, response) in
                let path = request.path
                print(path)
    //            let jsonDic = ["hello": "world"]
    //            let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: jsonDic)
    //            response.setBody(string: jsonString)                           //响应体
    //            response.completed()                                           //响应
                let queryParams = request.queryParams
                if queryParams.count == 0{
                    let result = DataBaseManager().mysqlGetHomeDataResult()
                    let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: result)
                    response.setBody(string: jsonString)
                    response.completed()
                }else{
                    //有参数
                    //let value : String
                    for i in 0...queryParams.count - 1{
                        let partArr = queryParams[i]
                        print(partArr)
                    }
                    let jsonString = self.baseResponseBodyJSONData(code: 200, message: "成功", data: nil)
                    response.setBody(string: jsonString)
                    response.completed()
                }
            }
        }
        
    然后调取接口访问数据http://0.0.0.0:8080/api/selectUserInfor;如下图:


    注意事项

    1.如果你在NetworkServerManager中无法调用DataBaseManager,或者说调用DataBaseManager查找不到,那是因为你创建DataBaseManager的时候没有选择在项目中引用,默认选择了第一个第三方库了;


    如果你创建完成只需要稍微修改一下就好;


    2.如果提示MySQL找不到,那是因为你的工程中,或者我们开始下载的那个示例工程没有导入MySQL,你需要引用一下就好;

    首先修改Package.swift文件,引用https://github.com/PerfectlySoft/Perfect-MySQL.git 

    示例如下:

    import PackageDescription
    
    let package = Package(
        name: "PerfectTemplate",
        targets: [],
        dependencies: [
            .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 3),
            .Package(url: "https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 2),
        ]
    )
    然后删除PerfectTemplate.xcodeproj文件, 接着终端重新生成PerfectTemplate.xcodeproj文件,最后打开工程就会发现MySQL库了,如下图:


    DEMO下载

    结束语

    欢迎大家加移动开发技术交流群,在这里大家可以一起讨论学习,这里有大佬,也有小菜鸟,没事还能斗斗图装装逼,如果需要换工作的还能相互推荐,期待大家的加入!大笑偷笑


                                                                 

                    












    展开全文
  • 本文是我在项目中自己封装的一个轮播图,封装的不好请见谅,以后优化! 这种轮播图采用了一张imageView,依靠手势识别器和视觉错位来实现轮播效果的,话不多说,上代码。。。 自定义RotateView类 列表内容 ...

    轮播图有好多种,各有千秋,下面就简单介绍一种:
    本文是我在写项目中自己封装的一个轮播图,封装的不好请见谅,以后优化!
    这种轮播图采用了一张imageView,依靠手势识别器和视觉错位来实现轮播效果的,话不多说,上代码。。。
    自定义RotateView类

    • 列表内容

    import UIKit

    //点击图片处理的代理
    @objc protocol RotateViewDelegate {
    optional func clickCurrentImage(currentIndex: Int)
    }

    class RotateView: UIView {

    var currentIndex = Int()
    
    var delegate : RotateViewDelegate?
    
    private var timer : NSTimer!
    private var index = Int()//当前数组里对应的元素下标
    private var showImageView = UIImageView()//当前显示的图片
    private var pageControl = UIPageControl()
    
    //需要轮播的图片数组
    var imageArray:[AnyObject!]!{
        //监听数组的变化
        willSet(newValue) {
            self.imageArray = newValue
        }
        didSet {
            setImageView()
            setPageControl()
            //添加定时器
            timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: #selector(self.transitionIsRight(_:)), userInfo: nil, repeats: true)
        }
    }
    //设置imageView
    func setImageView() {
        index = 0
        showImageView.frame = self.bounds;
        showImageView.userInteractionEnabled = true
        self.addSubview(showImageView)
        if self.imageArray.count > 0 {
            loadImageWithIndex(0)
        }
        //左滑手势
        let liftSwipe = UISwipeGestureRecognizer.init(target: self, action: #selector(self.liftSwipeAction(_:)))
        liftSwipe.direction = UISwipeGestureRecognizerDirection.Left
        //右滑手势
        let rightSwipe = UISwipeGestureRecognizer.init(target: self, action: #selector(self.rightSwipeAction(_:)))
        rightSwipe.direction = UISwipeGestureRecognizerDirection.Right
        //点击手势
        let tap = UITapGestureRecognizer.init(target: self, action: #selector(self.tapSwipeAction(_:)))
        //添加手势
        showImageView.addGestureRecognizer(liftSwipe)
        showImageView.addGestureRecognizer(rightSwipe)
        showImageView.addGestureRecognizer(tap)
    }
    //添加pageControl
    func setPageControl() {
        //添加一个pageControl
        pageControl.frame = CGRectMake(0, self.bounds.size.height - 40, self.bounds.size.width, 40)
        pageControl.backgroundColor = UIColor.lightTextColor()
        pageControl.numberOfPages = imageArray.count
        pageControl.currentPageIndicatorTintColor = UIColor.orangeColor()
        pageControl.pageIndicatorTintColor = UIColor.whiteColor()
        showImageView.addSubview(pageControl)
        self.bringSubviewToFront(pageControl)
        pageControl.userInteractionEnabled = false
    }
    //加载图片
    func loadImageWithIndex(index: Int) {
        if imageArray[index].isKindOfClass(UIImage) {
            showImageView.image = imageArray[index] as? UIImage
        }
        if imageArray[index].isKindOfClass(NSString) {
            showImageView.sd_setImageWithURL(NSURL.init(string: (imageArray[index] as? String)!), placeholderImage: UIImage.init(named: "carousel_default.jpg"))
        }
    }
    //左滑手势
    func liftSwipeAction(sender:UISwipeGestureRecognizer) {
        transitionIsRight(false)
        timer.invalidate()
        timer = nil
        if sender.state == UIGestureRecognizerState.Ended {
            timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: #selector(self.transitionIsRight(_:)), userInfo: nil, repeats: true)
        }
    }
    //右滑手势
    func rightSwipeAction(sender:UISwipeGestureRecognizer) {
        transitionIsRight(true)
        timer.invalidate()
        timer = nil
        if sender.state == UIGestureRecognizerState.Ended {
            timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: #selector(self.transitionIsRight(_:)), userInfo: nil, repeats: true)
        }
    }
    //设置滑动动画
    func transitionIsRight(isRight:Bool) {
        //创建动画
        let transition = CATransition()
        transition.type = "cube"
        if !isRight {//左滑
            index += 1
            transition.subtype = kCATransitionFromRight
        }else{
            if index == 0 {
                index = imageArray.count - 1
            }else{
                self.index -= 1
            }
            transition.subtype = kCATransitionFromLeft
        }
        transition.duration = 0.7;
        let currentIndex = index % self.imageArray.count
        loadImageWithIndex(currentIndex)//设置动画后的新图
        showImageView.layer .addAnimation(transition, forKey: "animation")//开启动画
        self.currentIndex = currentIndex
        self.pageControl.currentPage = currentIndex
    }
    //点击图片响应
    func tapSwipeAction(sender:UITapGestureRecognizer) {
        self.delegate?.clickCurrentImage!(currentIndex)
    }
    
    
    
    deinit {
        timer.invalidate()
        timer = nil
    }
    

    }
    ViewController中调用
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var headerView: UIView!
    @IBOutlet weak var rotateView: RotateView!
    //———viewDidLoad
    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    setupTableView()
    setHeaderView()
    }
    //———–RotateView
    func setHeaderView() {
    headerView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 390*SCALE_WIDTH)
    rotateView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 260*SCALE_WIDTH)
    rotateView.imageArray = [UIImage.init(named: “1.jpg”), UIImage.init(named: “2.jpg”), UIImage.init(named: “4.jpg”)]
    rotateView.delegate = self
    headerView.addSubview(rotateView)
    setServeViewToView(headerView)
    tableView.tableHeaderView = headerView
    }
    //点击图片响应
    func clickCurrentImage(currentIndex: Int) {
    print(currentIndex)
    }
    文章链接

    展开全文
  • 用Swift在导航栏上“镶嵌”一个搜索框如何用Swift在NavigationBar上放一个SearchBar呢?

    用Swift在导航栏上“镶嵌”一个搜索框

    如何用Swift在NavigationBar上放一个SearchBar呢?

    我开始在百度上搜关键字navigationcontroller searchbar,出来很多oc的解决方法,但是我用的是swift啊!

    接着我又增加了一个关键字Swfit,出来的方法跟我在后来stackoverflow里看到的一模一样,有些就是直接翻译的,基本就是这样的解决方法:

    • 首先来个搜索框searchbar先,可以如下用代码弄一个searchbar:
    lazy var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))

    也可以直接拖一个控件进来,就可以忽略上面一句了;

    • 在viewDidLoad里加上这些,当然也可以写在一个方法里,反正最后能执行到就行了:
    var leftNavBarButton=UIBarButtonItem(customView:searchBar)
    self.navigationItem.leftBarButtonItem=leftNavBarButton

    到这里为止,我在网上找的方法都到这里为止了,然而并没有解决我的问题(嚎啕大哭状)。


    如果你和我一样,到这里为止仍未解决问题,那你可以试试移动一下searchbar在整个view里的结构位置!这个方法是我自己瞎摸出来的!建立在上面的代码之上哟!

    一般情况下,拉一个searchbar出来之后,storyboard旁边都会这样:
    img
    然后searchbar在storyboard里会这样:
    这里写图片描述
    无论怎么移动searchbar,它要么被挡住大部分,要么一点击就消失,甚至干脆消失风雨中,我的天啊,反正状况百出。

    然后我死马当活马医,把它在结构里的位置移来移去,当它在以下结构的时候:
    这里写图片描述
    它变成了这个样子!
    这里写图片描述
    奇迹就出现了!
    这里写图片描述
    当当当当!!

    谢谢观看!
    博客地址:http://terrylovesolar.com/searchbar-in-navigationbar/

    展开全文
  • 1.看看题的模型吧,我这里是用一个数组来装的一个类,然后点击下一题的时候数组索引+1,上一题的数组模型-1,用户选择的答案和正确答案都存在数组里面的类中。 class OnlineTestDetailModel: HandyJSON { ...
  • 一.关于swift Swift是一种适用于iOS和OS X应用的全新编程语言,它建立在最好...Swift以成熟且备受宠爱的Cocoa和Cocoa Touch框架为支撑,这是一个重新构想软件开发的机会。   Swift经过了数年的酝酿,Apple通过改进现
  • 我是软件工程专业,大学期间学习过web和android,后来选择做了前端开发。年初公司要做APP,由于时间上的原因,来不及招IOS,所以我就担起了开发APP的责任,经历了段时间的学习,APP做了差不多(达到可以开始进行...
  • 原文地址:http://footle.org/WeatherBar/ 下面开始介绍如何使用Swift开发一个Mac Menu Bar(Status Bar) App。通过做一个简单的天气app。天气数据来源于OpenWeatherMap 完成后的效果如下: 一、开始建立工程打开...
  • ios在外语中是打招呼的意思Swift开发iOS应用开发苹果最近宣布了一个改变iOS应用既往开发的一个大变化,一种取代Objective-C称为Swift的完全不同的编程语言。我正在努力学习这门新语言,而且我决定将按照我的学习进程...
  • 用Swift写服务端 — Perfect框架学习(、Perfect简介 Perfect是组完整、强大的工具箱、软件框架体系和Web应用服务器,可以在Linux、iOS和macOS (OS X)上使用。该软件体系为Swift工程师量身定制了整套...
  • 作者丨郑宇琦,@提拉拉拉就是技术宅,现任职于LinkedIn,曾就职于百度来源丨个人博客https://mp.weixin.qq.com/s/z1Vy7Mdf-BfKvrIRqtB_V...
  • 最近抽风 粗略撸了几天的swift基础资料, 新项目就用swift写的.基本上是解决一个问题又碰到一个问题. 走到哪儿卡到哪儿 关于单例OC没什么好说的 . 度娘搜了下swift的单例,无外乎抄来抄去. 当然讲的讲的也挺好. ...
  • 最近在 MacOS 日常使用当中,发现有麻烦事情,就是我经常会压缩一些文件(或者文件夹)来分享给好友。这些 zip 压缩文件除了便于网络传输就没有其他的用处了,所以每次我的操作就是: 压缩想要分享的 app 或 文件...
  • 、什么是Swift? 1.Swift种新的编程语言,用于编写 iOS 和 OS X 应用。 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更...
  • 问题 1:我能否写一个 Swift 函数用于查找在任意数组中存储的任意类型的任何实例对象的位置\索引。 问题 2:我能否写一个 Swift 函数用于确定在任意数组中存储的任意类型的任何实例对象的类型。 我所说的 “任何...
  • OpenStack Swift学习笔记

    2014-01-10 10:31:10
    OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。...Swift通过在软件层面引入
  • 之前一个帖子我总结了自己秋招面试经历,作为一个Swift开发者,有一个非常高频的问题就是:你觉得Swift相比于其他语言(或者OC来说)的特点和优势是什么?作为一个见识短浅的小白来说,这个问题实在是不知如何下手啊...
  •  本人买了苹果本好久了,虽然买回来就把著名的xcode安装好了,但是该软件一直都是在沉睡,今天试读swift,就顺便打开可爱的xcode下了本机的第一个Hello world程序,也是本人的第一个swift程序 :)。 本来想要到...
  • Swift入门》关于Swift

    2016-04-05 20:29:14
    关于SwiftSwift 是一门新的编程语言,用于编写 iOS 和 OS X 应用程序。...Swift使用基于安全、性能和软件设计模式的现代方法生成的通用编程语言。Swift 项目的目标是创建用于系统编程最好的可用语言,包括移动
  • Swift5.2编程语言.pdf

    2020-07-30 23:31:25
    它是第一个工业级系统编程语言,却又像脚本语言那样 富有张力且十分有趣。在 Playground 编写代码并实时查看 Swift 代码运算结果,完全不需要 从头编译然后运行软件Swift 通过向其他现代编程模式学习,定义了大量...
1 2 3 4 5 ... 20
收藏数 11,702
精华内容 4,680
关键字:

怎么用swift写一个软件