Swift3.0語言教程使用路徑字符串
Swift3.0語言教程使用路徑字符串,路徑其實是字符串的一種,我們稱為路徑字符串。本小節將講解如何使用路徑字符串。
1.組合路徑
開發者可以將數組快速的組合成一個路徑,此功能的實現可以使用NSString中的path(withComponents:)方法,其語法形式如下:
class func path(withComponents components: [String]) -> String
其中,components是一個字符串數組。
【示例1-80】以下將數組組合為路徑。
import Foundation
let components:[String]=["Users","mac","Desktop","File.txt"]
let path=NSString.path(withComponents: components) //組合路徑
print(path)
運行結果如下:
Users/mac/Desktop/File.txt
2.分割路徑
在NSString中有組合路徑相對的就有分割路徑,使用pathComponents屬性就可以實現此功能,其語法形式如下:
var pathComponents: [String] { get }
【示例1-81】以下將實現路徑的分割。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print(path.pathComponents) //分割路徑
運行結果如下:
["/", "Users", "mac", "Desktop", "File.txt"]
3.獲取路徑信息
當一個路徑很長的時候,我們要獲取路徑的一些內容就會變得非常困難,在NSString中提供了很多的屬性為我們講解了這一難題。
(1)lastPathComponent屬性可以獲取路徑的最后一部分內容(即文件名),其語法形式如下:
var lastPathComponent: String { get }
【示例1-82】以下將獲取路徑的最后一部分內容。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print(path.lastPathComponent) //獲取路徑的最后一部分內容
運行結果如下:
File.txt
(2)pathExtension屬性可以獲取路徑的擴展名,其語法形式如下:
var pathExtension: String { get }
【示例1-83】以下將獲取路徑的擴展名。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print(path.pathExtension)
運行結果如下:
txt
(3)isAbsolutePath屬性可以用來判斷路徑是否為絕對路徑,其語法形式如下:
var isAbsolutePath: Bool { get }
【示例1-84】以下將判斷路徑是否為絕對路徑。
import Foundation
var path1=NSString(string:"/Users/mac/Desktop/File.txt")
var path2=NSString(string:"mac/Desktop/File.txt")
//判斷路徑path1是否為絕對路徑
if(path1.isAbsolutePath){
print("path1是絕對路徑")
}else{
print("path1不是絕對路徑")
}
//判斷路徑path2是否為絕對路徑
if(path2.isAbsolutePath){
print("path2是絕對路徑")
}else{
print("path2不是絕對路徑")
}
運行結果如下:
path1是絕對路徑
path2不是絕對路徑
4.將路徑字符串轉換為C字符串
路徑字符串也是可以轉換為C字符串的,此功能的實現需要使用到fileSystemRepresentation屬性。該屬性首先將這個路徑轉換成文件系統的規范形式,然后用UTF-8編碼形成C字符串,其語法形式如下:
var fileSystemRepresentation: UnsafePointer<Int8> { get }
【示例1-85】以下將路徑字符串轉換為C字符串。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
var str1="%s"
var systemRepresentation=path.fileSystemRepresentation //轉換
var str2=NSString(format: str1,systemRepresentation)
print(str2)
運行結果如下:
/Users/mac/Desktop/File.txt
5.簡化路徑
簡化路徑其實就是將系統的主目錄替換為“~”,此功能的實現需要使用到abbreviatingWithTildeInPath屬性,其語法形式如下:
var abbreviatingWithTildeInPath: String { get }
【示例1-86】以下將簡化路徑。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print(path.abbreviatingWithTildeInPath) //簡化路徑
運行結果如下:
~/Desktop/File.txt
6.擴展路徑
在NSString中有簡化路徑的方法,相對的就會有擴展路徑的方法,此功能需要使用expandingTildeInPath屬性,該屬性可以將“~”替換為系統的主目錄,其語法形式如下:
var deletingPathExtension: String { get }
【示例1-87】以下將擴展路徑
import Foundation
var path=NSString(string:"~/Desktop/File.txt")
print(path.expandingTildeInPath) //擴展路徑
運行結果如下:
/Users/mac/Desktop/File.txt
7.追加路徑
開發中可以在路徑后面追加路徑,如果想要實現此功能,可以使用NSString中的appendingPathComponent(_:)、appendingPathExtension(_:)和strings(byAppendingPaths:)方法。
(1)appendingPathComponent(_:)方法可以在路徑后面追加一個新的路徑,這個路徑是一個字符串,其語法形式如下:
func appendingPathExtension(_ str: String) -> String?
其中,str用來指定一個字符串。
【示例1-88】以下將使用appendingPathComponent(_:)方法追加一個路徑。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print("追加路徑前:\(path)")
print("追加路徑后:\(path.appendingPathComponent("Plist.plist"))")
運行結果如下:
追加路徑前:/Users/mac/Desktop/File.txt
追加路徑后:/Users/mac/Desktop/File.txt/Plist.plist
(2)appendingPathExtension(_:)方法和appendingPathComponent(_:)方法類似,但是appendingPathExtension(_:)在路徑后面追加的新路徑是一個擴展名。其語法形式如下:
【示例1-89】以下將使用appendingPathExtension(_:)方法追加一個路徑。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File")
print("追加路徑前:\(path)")
print("追加路徑后:\(path.appendingPathExtension("txt")!)")
運行結果如下:
追加路徑前:/Users/mac/Desktop/File
追加路徑后:/Users/mac/Desktop/File.txt
(3)appendingPathComponent(_:)和appendingPathExtension(_:)方法都是追加一個路徑,而strings(byAppendingPaths:)方法是追加多個路徑,其語法形式如下:
func strings(byAppendingPaths paths: [String]) -> [String]
其中,paths用來指定一個字符串數組。
【示例1-90】以下將使用strings(byAppendingPaths:)方法實現路徑的追加。
import Foundation
let components:[String]=["File1.txt","File2.txt","File3.txt","File4.txt"]
var path=NSString(string:"/Users/mac/Desktop/")
var paths=path.strings(byAppendingPaths: components)
//遍歷
for i in paths{
print(i)
}
運行結果如下:
/Users/mac/Desktop/File1.txt
/Users/mac/Desktop/File2.txt
/Users/mac/Desktop/File3.txt
/Users/mac/Desktop/File4.txt
8.刪除路徑
開發者可以在路徑中追加路徑,也可以刪除路徑,在NSString中刪除路徑的屬性有2個,分別為deletingLastPathComponent屬性和deletingPathExtension屬性。
(1)deletingLastPathComponent屬性可以用來刪除路徑中的最后一部分內容,其語法形式如下:
var deletingLastPathComponent: String { get }
【示例1-91】以下將使用deletingLastPathComponent屬性刪除路徑的最后一部分內容。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print("刪除路徑前:\(path)")
print("刪除路徑后:\(path.deletingLastPathComponent)") //刪除路徑的最后一部分內容
運行結果如下:
刪除路徑前:/Users/mac/Desktop/File.txt
刪除路徑后:/Users/mac/Desktop
(2)deletingPathExtension屬性可以刪除路徑的擴展名,其語法形式如下:
var deletingPathExtension: String { get }
【示例1-92】以下將使用deletingPathExtension屬性刪除路徑的擴展名。
import Foundation
var path=NSString(string:"/Users/mac/Desktop/File.txt")
print("刪除路徑前:\(path)")
print("刪除路徑后:\(path.deletingPathExtension)") //刪除路徑的擴展名
運行結果如下:
刪除路徑前:/Users/mac/Desktop/File.txt
刪除路徑后:/Users/mac/Desktop/File
9.解析路徑中的符號鏈接
在大多數的路徑中都會存在很多的符號路徑,使得路徑變的很不規范。在NSString中的resolvingSymlinksInPath屬性將解析路徑中的符號路徑,將不規范的路徑變的規范,其語法形式如下:
var resolvingSymlinksInPath: String { get }
【示例1-93】以下將解析路徑中的符號鏈接。
import Foundation
var path=NSString(string:"/.//tmp/ABC/..")
print(path.resolvingSymlinksInPath) //解析路徑中的符號鏈接
運行結果如下:
/tmp
10.標准化路徑
在NSString中的standardizingPath屬性可以移除在路徑中無關的部分,從而實現對路徑的標准化,其語法形式如下:
var standardizingPath: String { get }
【示例1-94】以下將標准化路徑。
import Foundation
var path=NSString(string:"~/Desktop/File.txt/./tmp")
print(path.standardizingPath) //標准化路徑
運行結果如下:
/Users/mac/Desktop/File.txt/tmp
11.查詢文件夾下包含指定擴展名的文件路徑
為了快速從文件夾中提取特定類型的文件,NSString提供了completePath(into:caseSensitive:matchesInto:filterTypes:)方法,其語法形式如下:
func completePath(into outputName: AutoreleasingUnsafeMutablePointer<NSString?>?, caseSensitive flag: Bool, matchesInto outputArray: AutoreleasingUnsafeMutablePointer<NSArray?>?, filterTypes: [String]?) -> Int
其中,參數說明如下:
q outputName:用來指定一個NSString類型的變量指針。
q flag:用來指定是否區分大小寫。
q outputArray:用來指定一個NSArray類型的變量指針,其中包含了所有匹配的文件名程序。
q filterTypes:用來指定一個字符串數組,此數組中包含了用來查詢的文件擴展名。
【示例1-95】以下將在文件夾NSString中查詢擴展名為txt、csv的路徑。
import Foundation
var partialPath : NSString = "/Users/mac/Desktop/NSString/"
var longestCompletition : NSString?
var outputArray : NSArray? = []
var filterTypes = ["txt", "csv"]
var allMatches = partialPath.completePath(into: &longestCompletition, caseSensitive: false, matchesInto: &outputArray, filterTypes: filterTypes) //查詢
print(outputArray!)
運行結果如下:
(
"/Users/mac/Desktop/NSString/.git",
"/Users/mac/Desktop/NSString/Build",
"/Users/mac/Desktop/NSString/File.txt",
"/Users/mac/Desktop/NSString/NSString",
"/.DocumentRevisions-V100",
……
"/Users",
"/usr",
"/var",
"/Volumes"
)
Swift3.0語言教程使用路徑字符串