swift语言

Swift 中范围和区间如何使用?

…衆ロ難τιáo~ 提交于 2019-11-28 13:27:25
虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对 swift语言 存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧。 Ranges 在swift语言中,范围是用 Range 类型表达的,一个范围就是一个索引集合。 其中,值得注意的是Range在标准库中使用很频繁,特别是处在集合的上下文当中时。当我们查看 Range 定义时,范围和集合之间的紧密关系一目了然: struct Range<Element : ForwardIndexType> : CollectionType, Indexable, ... { ... } 在一个范围中的元素必需遵守 ForwardIndexType 协议,同时 CollecitonType 协议中的大量功能也是基于它实现的。有一个特殊的类型用来表示集合索引的范围,对于获取一个集合的子集是相当有意义的。例如,我们可以使用范围获取一个数组的部分: let numbers = [1,2,3,4,5,6,7,8,9] // 1..<5 等价于 Range(start: 1, end: 5) numbers[1..<5] // [2,3,4,5] 正如类型定义中所看到的, Range 自身遵循 CollectionType 协议,所以几乎所有数组可以做的事情,范围也能够适用。比如用

Swift-学习Perfect搭建博客

狂风中的少年 提交于 2019-11-27 09:39:22
前段时间听说swift5的改变之一是ABI稳定,现在看的话,swift是值得学习的,于是想通过搭建自己的博客来学习swift,顺便了解后端和mysql,以及前端页面的一些样式. 博客传送门 博客项目放在了 github ,喜欢的可以点赞. Perfect 在swift作为语言基础的前提下,选择了Perfect框架,Perfect网站上有详细的文档和用例,前期可以先参考 Perfect-Blog-Mustache ,这是一个非常简单的blog框架.Perfect文档详细介绍了每个功能模块的用法,需要注意的是 HTTP路由 ,这是我们会经常用到的库 云服务器和mysql 当启动PerfectHttp服务器后,通过访问 127.0.0.1:端口 ,就可以看到我们设置的index.html页面,通过在 HTTP路由 中设置的 url 我们可以访问对应的路径,得到对应的页面,这里的页面应该是一个静态页面,是固定不会变化的.我们可以在服务器中安装mysql作为数据提供,也可以在本机安装mysql. 我的服务器安装了ubuntu14.0和mysql5.7,以及swift4.2. 将项目放到github上托管,在终端使用ssh远程连接云服务器,使用 git clone 拉取项目,然后 swift build ,正常情况下会开启我们的http服务. 这里有点要注意的,在server的路径

开启你的Swift服务器之旅-Perfect框架

淺唱寂寞╮ 提交于 2019-11-27 09:39:05
前言 一直想学习一门后端语言, 能够写一些Api给自己的App使用. 考虑过js配合node.js, 后来放弃了. 最开始看到swift相关的新闻, 已经知道swift能够编写服务器, 但是一直没有怎么关注, 直到那天我简单看了一下swift的几个服务器框架, 才发现今日的swift服务器框架, 早已足够满足我的现有需求了. 为什么要选择Perfect这个框架, 是因为他星星最多, 中英文文档. 非常友好. github.com/perfectlySo… github.com/vapor/Vapor github.com/ibm-swift/k… github.com/zewo/Zewo 看完系列文章, 你能收获什么? Perfect在Mac本地环境的配置 在Ubuntu服务器上配置Swift编译环境 在Ubuntu服务器上安装MySql 如果你安装的面板工具里面自带Mysql, 可以省略Mysql安装步骤, 但是远程访问Mysql还是可以参考本文. 使用Supervisor让你的Swift Perfect服务器项目后台运行 Swift Perfect服务器端的自动化部署 当你掌握了以上的姿势后, 你就可以给自己编写接口了, 是不是很赤鸡? 其实Perfect有自己的部署工具 perfect.org/zh/assistan… , 但是仅限于 亚马逊云EC2服务器部署 和

Swift Perfect 从零开始到阿里云ECS实际应用教程(一)

微笑、不失礼 提交于 2019-11-27 09:35:55
Perfect 是一组完整、强大的工具箱、软件框架体系和 Web 应用服务器,可以在 Linux 和 macOS (OS X) 上使用。该软件体系为 Swift 工程师量身定制了一整套用于开发轻量、易维护、规模可扩展的 Web 应用及其它 REST 服务的解决方案,这样 Swift 工程师就可以实现同时在服务器和客户端上采用同一种语言开发软件项目。 由于建立在一个高性能异步网络引擎基础上, Perfect 还能够在 FastCGI 上运行,支持安全套接字加密( SSL )。该软件体系还包含很多其它互联网服务器所需要的特点,包括 WebSockets 和 iOS 消息推送,而且很快会有更多强大的功能支持。 转载至 https://www.perfect.org/docs/index_zh_CN.html 一、阿里云 ECS 云服务器配置 1. 申请阿里云 ECS 云服务器,服务器系统选择 Ubuntu 16.04 64 位系统, 申请完成后可得如下界面: 2. 设置服务器安全组,设置 http 内网入方向与内网出方向的端口 80 ,授权对象 0.0.0.0/0 ,允许 http 访问 80 端口。 选择添加安全组规则后按下图配置添加授权。 这样我们就能通过阿里云分配的公网地址来 http 访问我们的服务器了。 3. 重新设置远程连接与服务器登录密码;若知道的话,可以跳过这步

用Swift写服务端 — Perfect框架

你。 提交于 2019-11-27 09:34:44
用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 我们可以在控制台看到以下内容:

Swift 面试题

耗尽温柔 提交于 2019-11-27 07:10:47
文章转载自: http://www.pythonheidong.com/blog/article/2188/ 1. 给一个数组,要求写一个函数,交换数组中的两个元素 二X程序员: 好简单啊,直接写出以下结果 func swap(_ nums: inout [Int], _ p: Int, _ q: Int) { let temp = nums[p] nums[p] = nums[q] nums[q] = temp } 普通程序员: 首先跟面试官沟通,是什么类型的数组?面试官会说,任意。普通程序员微微一笑,写出以下代码 func swap<T>(_ nums: inout [T], _ p: Int, _ q: Int) { let temp = nums[p] nums[p] = nums[q] nums[q] = temp } 文艺程序员: 与面试官沟通,是什么类型的数组?有什么其他要求和限制?面试官会说,这是一个Swift面试题。文艺程序员心领神会,于是写出以下答案 func swap<T>(_ nums: inout [T], _ p: Int, _ q: Int) { (nums[p], nums[q]) = (nums[q], nums[p]) } 同时对以上代码写上相应测试,检测各种边界情况,再确认无误后,才会说,这道题目我完成了。 这道题目看似简单

苹果编程语言Swift简介

a 夏天 提交于 2019-11-26 21:15:40
Swift是什么? Swift是苹果于WWDC 2014发布的编程语言, The Swift Programming Language 的原话: Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible and more fun. Swift’s clean slate, backed by the mature and much-loved Cocoa and Cocoa Touch frameworks, is an opportunity to imagine how software development works. Swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a

Swift 小知识总结

六眼飞鱼酱① 提交于 2019-11-26 19:25:14
本文是我在写第一个Swift项目时,总结的小知识点 因为从OC学习而来,只是简单的学了基本语法,在准备写的过程中,问题颇多。 没有像OC系统学习,还是挺不好弄的,只能一边写一边总结,最主要查资料也挺少的,慢慢都去看文档了,英文的头大啊,逼迫我们变优秀 Swift初始化方法 Swift:必须添加init?(coder decoder: NSCoder)的原因 全能初始化方法 顾名思义,就是全部属性都必须初始化 全能初始化方法必须调用父类的全能初始化方法 class GameCharacter { var weapon: String init() { self.weapon = "fist" } init(weapon: String) { self.weapon = weapon } } 便利初始化 初始化部分属性,但是最终必须调用当前类的全能初始化方法 class Warrior: GameCharacter { var shield: String init(weapon: String, shield: String) { self.shield = shield super.init(weapon: weapon) } convenience init(shield: String) { self.init(weapon: "fist", shield: shield) }

Swift学习笔记 (十九) 属性

大憨熊 提交于 2019-11-26 16:47:43
属性将值与特定的类、结构体或枚举关联。存储属性会将常量和变量存储为实例的一部分,⽽计算属性则是直接计算(而不是存 储)值。计算属性可以用于类、结构体和枚举,⽽存储属性只能用于类和结构体。 存储属性和计算属性通常与特定类型的实例关联。但是, 属性也可以直接与类型本身关联,这种属性称为类型属性 。 另外,还可以定义属性观察器来监控属性值的变化,以此来触发自定义的操作。 属性观察器可以添加到类本身定义的存储属性 上,也可以添加到从⽗类继承的属性上。 存储属性 简单来说,一个 存储属性就是存储在特定类或结构体实例里的一个常量或变量。存储属性可以是变量存储属性(用关键字var 定 义),也可以是常量存储属性(⽤关键字 let 定义)。 可以在定义存储属性的时候指定默认值,请参考默认构造器 一节。也可以在构造过程中设置或修改存储属性的值,甚⾄修改常量 存储属性的值(常量属性没有初始值的情况下),请参考《构造过程中常量属性的修改》 一节。 下⾯的例子定义了一个名为 FixedLengthRange 的结构体,该结构体用于描述整数区间,且这个范围值在被创建后不能被修改。 struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRange(firstValue

Swift语言之命令模式(Command Pattern)实现

夙愿已清 提交于 2019-11-26 15:44:16
今天遇到这样一个问题,我现在有一个整数数组,如: var numbers = [3, 7, 12, 9, 200] 现需要对其中的每一个数字都执行一系列相同的加减乘除操作,如对每一个数字都加5乘8再减去1,但是这样的操作在编译时并不确定,需要在运行时由用户指定; 一看到这个题目,当然就想到了用设计模式中的命令模式来实现; 于是先写了这样的一个类: class Calculator { private(set) var total = 0 required init(value: Int){ total = value } func add(amount: Int) { total += amount } func substract(amount: Int) { total -= amount } func multiply(amount: Int) { total = total * amount } func divide(amount: Int) { total = total / amount } } 这个类用于实现对某个数执行不同的操作。 下一步中我创建了一个Command类,用于记录需要执行的操作: struct Command { typealias OperationType = (Calculator -> Int -> Void) let operation: