1. 程式人生 > >Swift學習筆記六:常見概念(一)

Swift學習筆記六:常見概念(一)

七、常見概念

1.範圍Range、ClosedRange和NSRange的使用

//區間分為閉區間和半開區間

import Foundation

let closedRange: ClosedRange = 1...3 //閉區間

let intArray = ["1", "2", "3", "4", "5"]

intArray[closedRange] //使用閉區間,獲得陣列中的從第2個位置開始,至第4個位置的所有元素,並返回由這三個元素組成的陣列

let halfOpenRange: Range = 1..<3 //半開區間

intArray[halfOpenRange]

var myUrl = "coolKetang.com"

let startIndex = myUrl.index(myUrl.startIndex, offsetBy: 0) //獲得字串中的一個索引位置。從起點開始,偏移值為0,所以獲得的索引為字串的起始位置

let endIndex = myUrl.index(myUrl.startIndex, offsetBy: 10)

let myRange = startIndex..<endIndex//使用兩個索引位置,建立半閉合區間

myUrl[myRange] //擷取字串

//NSRange也是表示區間的類,來自OC語言,它包括位置和長度兩個屬性

let range = NSRange.init(location: 1, length: 2

) //定義了一個起點為1,長度為2的區間

intArray[Range.init(range)!] //擷取陣列

//注意:也可以用來擷取字串,但是需要將字串轉換成OC語言中的NSString字串型別

let myWebsite = myUrl as NSString

myWebsite.substring(with: NSRange.init(location: 0, length: 10))

2.點CGPoint和變形CGAffineTransform的使用

//CG表示來自CoreGraphic這個跨平臺的框架

import UIKit        //表示介面工具框架

import QuartzCore   //表示核心繪圖和動畫框架

let zeroPoint = CGPoint.zero//定義一個點物件,並設定他的位置為原點

var point = CGPoint()

point.x

point.y

point.debugDescription//點物件:由大括號包括,由x和y兩個值組合而成

point.equalTo(CGPoint(x: 0, y: 0)) //判斷兩個點物件的值是否相同

var secondPoint = CGPoint(x: 10, y: 10)

//通過仿射變換,可以對點物件進行變形。仿射變換定義在二維空間上,可以完成平移、旋轉和縮放等效果。

let transform: CGAffineTransform = CGAffineTransform.identity//在此初始化一個仿射變換物件,其值為原始值

let moveTransform = transform.translatedBy(x: 10, y: 10) //水平和垂直方向各平移10的距離

let thirdPoint = secondPoint.applying(moveTransform//給點物件應用平移後的仿射變換

let rotateTransform = moveTransform.rotated(by: 90 * 3.1415/180.0) //對仿射變換物件進行旋轉90度,旋轉的角度為弧度方式

let fouthPoint = thirdPoint.applying(rotateTransform)

let pointFromString = CGPointFromString("{100, 100}") //點物件和字串可以相互轉換

3.尺寸CGSize的使用詳解(匯入框架同2)

//定義一個尺寸物件,尺寸物件包含寬度和高度兩個引數。

let zeroSize = CGSize.zero

let size = CGSize(width: 20, height: 10)

size.width

size.height

size.debugDescription

//通過仿射變換,可以對尺寸物件進行變形。

let transform: CGAffineTransform = CGAffineTransform.identity

let moveTransform = transform.translatedBy(x: 10, y: 10)

let secondSize = size.applying(moveTransform)

let rotateTransform = moveTransform.scaledBy(x: 2.0, y: 1.0) //將仿射變換物件在水平方向上放大兩倍,垂直方向上不變

let thirdSize = size.applying(rotateTransform)

thirdSize.equalTo(size//判斷尺寸大小是否相同

thirdSize.equalTo(CGSize(width: 40, height: 10))

let fifthSize = CGSizeFromString("{200, 100}") //尺寸物件和字串可以相互轉換

4.範圍CGRect的使用詳解

//CGRect物件可以看作點物件和尺寸物件的組合

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)

//區域物件由大括號包括,並由x、y、寬度和高度四個值組合而成

rect.debugDescription

//區域物件可以由點物件和尺寸物件組合而成

let origin = CGPoint.zero

let size = CGSize(width: 100, height: 100)

let secondRect = CGRect(origin: origin, size: size)

secondRect.origin.x

secondRect.origin.y

secondRect.size.width

secondRect.size.height

//直接查詢區域物件的寬度和高度

secondRect.width

secondRect.height

//通過水平和垂直方向上的最小值和最大值,可以查詢區域物件左上角和右下角的座標

secondRect.minX

secondRect.maxX

secondRect.minY

secondRect.maxY

//判斷該區域是否包含某個指定的點

secondRect.contains(CGPoint(x: 10, y: 10))

//判斷該區域是否包含某個指定的區域

secondRect.contains(CGRect(x: 0, y: 0, width: 50, height: 50))

//判斷區域是否相等

secondRect.equalTo(rect)

//獲取另一個區域物件,該區域物件位於原區域物件的內部,並且和原區域物件的四周保持10的距離

secondRect.insetBy(dx: 10, dy: 10)

//獲得兩個區域相交的區域

secondRect.intersection(CGRect(x: 40, y: 40, width: 100, height: 20))

//判斷兩個區域是否相交

secondRect.intersects(CGRect(x: 80, y: 0, width: 100, height: 100))

//獲得一個區域物件,在水平和垂直方向各偏移10之後的區域

secondRect.offsetBy(dx: 10, dy: 10)

//獲得兩個區域合併之後的區域

secondRect.union(CGRect(x: 50, y: 50, width: 100, height: 100))

//將字串轉換為區域物件

CGRectFromString("{{0, 0}, {100, 100}}")

5.使用NSString對字串進行各種操作

//NS是Cocoa類物件型別的字首,來源於喬布斯建立的另一家公司NeXT

let string = NSString(string: "meet")

let floatString = NSString(format: "%f", 25.0//浮點數轉換成字串

var secondString = string.appending(" coolketang.") //追加字串

secondString.capitalized//將字串中的單詞轉換為首字母大寫的單詞

//將字串進行不區分大小寫的比較。返回的結果的型別是列舉型別。-1表示當兩個字串進行排序時,當前字串位於進行比較字串的前方。值為0表示兩個字串相同。

//該列舉型別包含三個列舉成員,原始值分別為-1,0和1.可以簡單理解為假如將兩個比較的字串進行排序時,有升序、相同和降序三種結果。

secondString.caseInsensitiveCompare("test").rawValue

secondString.caseInsensitiveCompare("meet coolketang.").rawValue

//比較語句預設採用不區分大小寫的比較方式

secondString.compare("meet coolketang.").rawValue

secondString.caseInsensitiveCompare("coolketang").rawValue

secondString.commonPrefix(with: "meet swift."//獲得兩個字串共同的字首

secondString.contains("coolketang") //檢查自定義是否包含另一個指定的字串

secondString.data(using: .utf8) //返回包含給定編碼的字串表示形式的資料

secondString.hasPrefix("meet"//檢測字串是否擁有指定內容的字首

secondString.hasSuffix("coolketang.")   //檢測字串是否擁有指定內容的字尾

secondString.insert(".", at: secondString.endIndex) //在指定的索引位置上,插入指定的字串

secondString.lengthOfBytes(using: .utf8) //獲得字串在指定編碼規則下的長度資訊

secondString.characters.count//獲得字串中的字元的數量

secondString.lowercased() //獲得字串全部小寫的樣式

secondString.uppercased() //獲得字串全部大寫的樣式

secondString.range(of: "meet")?.lowerBound//獲得指定字串在當前字串中的起始位置和結束位置,位置的值為索引格式

secondString.range(of: "meet")?.upperBound

secondString.removeSubrange(secondString.range(of: "meet")!)//刪除字串指定區間的內容

secondString.replacingOccurrences(of: "coolketang", with: "swift") //將字串中存在的內容,替換為指定的其他內容

secondString[secondString.index(secondString.startIndex, offsetBy: 1)] //獲得從第一個字元開始,向右偏移1位之後的字元

6.日期Date和DateFormatter日期的格式化

var date = Date()

date.addTimeInterval(60 * 60)   //獲取當前60分鐘之後的時間

let secondDate = date.addingTimeInterval(60 * 60)

//對兩個時間進行比較,結果為列舉型別,包括-1(小於)、0(等於)、1(大於)

date.compare(date.addingTimeInterval(60 * 60)).rawValue

date.compare(date.addingTimeInterval(0)).rawValue

date.compare(date.addingTimeInterval(-60 * 60)).rawValue

date.description//獲得當前時間字串形式

date.timeIntervalSince(secondDate) //獲得兩個時間之間的差值,單位為秒

date.timeIntervalSince1970

date.timeIntervalSinceNow//獲得指定日期和當前時間的差值

let dateFormatter = DateFormatter() //日期格式化物件

dateFormatter.locale = Locale.current//設定日期格式化物件的本地屬性

dateFormatter.dateStyle = DateFormatter.Style.full//設定日期的樣式為全格式,即包含年、月、日、星期等各種資訊

dateFormatter.string(from: date)

dateFormatter.dateStyle = DateFormatter.Style.long//使用長型別對日期進行格式化

dateFormatter.string(from: date)

dateFormatter.dateStyle = DateFormatter.Style.medium//使用中間樣式對日期進行格式化

dateFormatter.string(from: date)

dateFormatter.dateStyle = DateFormatter.Style.short//使用短間樣式對日期進行格式化

dateFormatter.string(from: date)

dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"//使用自定義日期樣式,對日期進行格式化,注意小時制是12小時進位制

dateFormatter.string(from: date)

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"//hh->HH,小時制變為24小時進位制

dateFormatter.string(from: date)

dateFormatter.dateFormat = "yyyy-MM-dd"

dateFormatter.string(from: date)

dateFormatter.dateFormat = "yyyy-M-dd"//MM->M表示月份簡化,不會對月份補0

dateFormatter.string(from: date)

let dateString = "2017-06-02 18:15:59"//字串轉換成日期

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let newDate = dateFormatter.date(from: dateString)

//比較兩個日期的先後,先獲得兩個日期和固定參考日期的距離,然後對距離進行比較

(newDate?.timeIntervalSinceReferenceDate)! > date.timeIntervalSinceReferenceDate

7.日曆Calendar和日期元件DateComponents

//通過日曆的日期部件,可以獲得日期的各個部分

let date = Date()

let currentCalendar = Calendar.current

let dateComponents = currentCalendar.dateComponents([Calendar.Component.era,Calendar.Component.year,Calendar.Component.month,Calendar.Component.day,Calendar.Component.hour,Calendar.Component.second,Calendar.Component.minute], from: date) //獲得日期的各個組成部分

dateComponents.era

dateComponents.year

dateComponents.month

dateComponents.day

dateComponents.hour

dateComponents.minute

dateComponents.second

var componrnts = DateComponents() //初始日期部件

componrnts.year = 2017

componrnts.month = 09

componrnts.day = 20

let compents = currentCalendar.date(from: componrnts)

相關推薦

Swift學習筆記常見概念

七、常見概念1.範圍Range、ClosedRange和NSRange的使用//區間分為閉區間和半開區間import Foundationlet closedRange: ClosedRange = 1...3 //閉區間let intArray = ["1", "2", "

深度學習筆記常見啟用函式總結

一.啟用函式概覽 基本上,入門深度學習的第一件事情就是了解”神經元”的構造,啟用函式算是最基本的一個”部件”了吧.那啟用函式到底有什麼用呢?為什麼需要啟用函式?啟用函式的定義是什麼呢? 下面這篇論文提供了啟用函式的定義以及常見的”飽和”的定義,以及對於啟用函

python程式設計從入門到實踐學習筆記-Django開發使用者賬戶

讓使用者能夠輸入資料(表單) 在建立使用者賬戶身份驗證系統之前,先新增幾個頁面,讓使用者能偶輸入資料。新增新主題、新增新條目以及編輯既有條目。 新增新主題 1.用於新增主題的表單 建立一個forms.py檔案與models.py放在同一目錄下。 from django import

Angular6學習筆記8 服務(Service)1

服務(Service) 繼學習筆記7,可以使用主從元件,現在繼續學習(服務)Service; 問題:為什麼需要服務? 因為:元件不應該直接獲取或儲存資料,它們不應該瞭解是否在展示假資料。 它們應該聚焦於展示資料,而把資料訪問的職責委託給某個服務。 這次將建立一個 H

Esper學習筆記EPL語法3

1.Aggregation 類似於SQL中的聚合函式,EPL中聚合函式格式如下: aggregate_function([all|distinct] expression) aggregate_function就是聚合函式的名字,比如avg,sum等。expression通常是事件

Esper學習筆記EPL語法2

1.select 查詢所有屬性或特定屬性 EPL的select和SQL的select很相近,SQL用*表示查詢表的所有欄位,而EPL用*表示查詢事件流的所有屬性值。SQL查詢某個欄位名,直接在select後跟欄位名就ok,EPL也是將要查詢的屬性名放在select之後。若查多個屬

Esper學習筆記EPL語法1

1.EPL語法簡介 EPL全稱Event Processing Language,是一種類似SQL的語言,包含了SELECT, FROM, WHERE, GROUP BY, HAVING 和 ORDER BY子句,同時用事件流代替了table作為資料來源,並且能像SQL那樣join,fil

Aras學習筆記 (21) TeamCenter相關概念

        PDM是一門用來管理所有與產品相關的資訊(即描述產品的各種資訊,包括但不限於零部件資訊、結構、配置、文件、CAD 檔案、許可權資訊等)和過程(指產品的發放、變更、審批過程和其它的工作流程,包括對這些過程的定義和管理)的技術。

《組合語言第3版王爽 著學習筆記基礎知識2

1.7 CPU 對儲存器的讀寫 以上講到,儲存器被劃分成多個儲存單元,儲存單元從零開始編號。這些編號可以看作儲存單元在儲存器中的地址。就想一條街,每個房子都有門牌號碼。 CPU 要從記憶體中讀資料,

《組合語言第3版王爽 著學習筆記基礎知識3

1.11 記憶體地址空間(概述) 什麼是記憶體地址空間呢?舉例來講,一個 CPU 的地址匯流排寬度為 10,那麼可以定址 1024 個記憶體單元,這 1024 個可尋到的記憶體單元就構成這個 CPU

【設計模式】學習筆記14狀態模式State

public class GumballMachine { State soldOutState; State noQuarterState; State hasQuarterState; State soldState; State state = soldOutState; int c

Esper學習EPL語法

轉載請註明出處:http://blog.csdn.net/luonanqin         中秋三天,說閒也不閒,調調工作的程式碼,倒還解決不少問題。不過也是因為最近工作忙的緣故,Esper被我冷落不少日子了,趁著今天最後一天,趕緊寫一篇出來。         從

C#.Net 設計模式學習筆記之創建型

應用 種類 單件 src nag abstract 子類 指定 相關 1、抽象工廠(Abstract Factory)模式 常規的對象創建方法: //創建一個Road對象 Road road =new Road(); new 的問題: 實現依賴,不能應對“具

C#學習筆記-域用戶認證

byte name urn validate finally tostring code date geb public Boolean ValidateDomainUser(string Domain, string UserName, string

Spring Cloud學習筆記之微服務實現Spring Boot+IDEA

我們先使用Spring Boot實現一個微服務,業務非常簡單: 1.商品微服務,通過商品id查詢商品的微服務 2.訂單微服務,通過訂單id查詢訂單資料,同時需要呼叫商品微服務查詢出訂單詳情資料對應的商品資料。 說明: 1.對於商品微服務而言,商品微服務是服務的提供者,訂單微服務是服務的消費

公開課學習筆記- 哈佛 電腦科學CS50

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linux學習筆記之linux常用命令

Linux常用命令 檔案處理命令 許可權管理命令 檔案搜尋命令 幫助命令 使用者管理命令 壓縮解壓命令 網路命令 關機重啟命令 檔案處理命令 命令格式 命令 【-選項】【引數】 ls -la

C++ 學習筆記 變數和基本型別

C++ 學習筆記 一、變數和基本型別概述 型別是所有程式的基礎。型別告訴我們資料代表什麼意思以及可以對資料執行哪些操作。 c++基本型別: 字元型 整型 浮點型 c++ 還提供了可用於自定義資料型別的機制,標準庫正式利用了這些機制定義了許多更復雜的型別,比如可變長字串string 和vector等。此外,

linux學習筆記之常用基本命令

1.幫助命令 man獲取幫助資訊 語法:man[命令或配置檔案] help獲得shell內建命令的幫助資訊 語法:help 命令 例: help cd 常用快捷鍵 ctrl +c: 停止程序 ctrl +l: 清屏 ctrl +q: 退出 tab鍵 :補全命令(常用t

Pyhon網路爬蟲學習筆記—抓取本地網頁

如何用Python爬取本地網頁   一、寫出一個簡單的靜態網頁,下面是我隨便寫的一個 網頁原始碼如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT