Swift3.0語言教程使用指針建立和初始化字符串編碼
Swift3.0語言教程使用指針建立和初始化字符串蘋果的Swift團隊花了很多功夫來支持C的一些基礎特性。C語言中爲咱們提供了指針,Swift也不例外,開發者能夠使用指針去建立和初始化字符串。指針
(1)在NSString中init(bytes:length:encoding:)方法能夠從給定字符串按照指定獲取方向,獲得指定個數的字符,而後使用這些字符建立和初始化字符串。其語法形式以下:教程
convenience init?(bytes: UnsafePointer<Void>, length len: Int, encoding: UInt)開發
其中,bytes用來指定一個常量指針,length用來從使用的字節中指定字節數,encoding用來指定應用在字節中的字符編碼。字符串
【示例1-9】如下將使用init(bytes:length:encoding:)方法建立和初始化字符串。string
import Foundationit
var str=NSString(bytes: "Hello,World",length: 8,encoding: String.Encoding.utf8.rawValue)io
print(str!)字符編碼
運行結果以下:table
Hello,Wo
(2)init(bytesNoCopy:length:encoding:freeWhenDone:)方法也是從給定字符串按照給定獲取方向,獲得指定個數的字符,經過這些字符建立和初始化字符串,可是此方法須要對存儲器中數據的釋放進行設置。其語法形式以下:
convenience init?(bytesNoCopy bytes: UnsafeMutablePointer<Void>, length len: Int, encoding: UInt, freeWhenDone freeBuffer: Bool)
其中,參數說明以下:
q bytes:用來指定一個變量指針。
q len:用來用來從使用的字節中指定字節數。
q encoding:用來指定應用在字節中的字符編碼。
q flag:用來對存儲器中數據的釋放進行設置。當設置爲true時,能夠將存儲器中再也不使用的數據進行釋放,反之,不釋放。
【示例1-10】如下將使用init(bytesNoCopy:length:encoding:freeWhenDone:)方法建立和初始化字符串。
import Foundation
var a=NSString(string: "Hello,World")
var b=a.utf8String!
var c:UnsafeMutablePointer<Void>=UnsafeMutablePointer<Void>(b)
var str=NSString(bytesNoCopy: c,length: 8,encoding: String.Encoding.utf8.rawValue,freeWhenDone: true)
print(str!)
運行結果以下:
Hello,Wo
(3)init(characters:length:)方法能夠從一個C語言字符串得到指定個數的元素,經過這些元素對字符串進行建立和初始化,其語法形式以下:
convenience init(characters: UnsafePointer<unichar>, length: Int)
其中,characters用來指定一個常量指針,length用來從使用的字符中指定字符個數。
【示例1-11】如下將使用init(characters:length:)方法建立和初始化字符串。
import Foundation
let str1=NSString(string: "Hello")
let char:[unichar]=[str1.character(at: 0),str1.character(at: 1),str1.character(at: 2),str1.character(at: 3),str1.character(at: 4)]
var str2=NSString(characters: char,length: 3)
print(str2)
運行結果以下:
Hel
(4)init(charactersNoCopy:length:freeWhenDone:)方法也是從一個C語言字符串得到指定個數的元素,經過這些元素對字符串進行建立和初始化,可是此方法須要對存儲器中數據的釋放進行設置。其語法形式以下:
convenience init(charactersNoCopy characters: UnsafeMutablePointer<unichar>, length: Int, freeWhenDone freeBuffer: Bool)
其中,參數說明以下:
q characters:用來指定一個變量指針。
q length:用來從使用的字符中指定字符個數。
q freeBuffer:用來對存儲器中數據的釋放進行設置。當設置爲true時,能夠將存儲器中再也不使用的數據進行釋放,反之,不釋放。
【示例1-12】如下將使用init(charactersNoCopy:length:freeWhenDone:)方法建立和初始化字符串。
import Foundation
let a=NSString(string: "Swift")
var b:[unichar]=[a.character(at: 0),a.character(at: 1),a.character(at: 2),a.character(at: 3),a.character(at: 4)]
var str=NSString(charactersNoCopy: &b,length: 3,freeWhenDone:true)
print(str)
運行結果以下:
Swi
(5)init(utf8String:)方法能夠使用UTF8格式的字符串建立和初始化一個字符串,其語法形式以下:
convenience init?(utf8String nullTerminatedCString: UnsafePointer<Int8>)
其中,nullTerminatedCString用來指定一個常量指針。
【示例1-13】如下將使用init(utf8String:)方法建立和初始化字符串。
import Foundation
var str=NSString(utf8String: "Swift")
print(str!)
運行結果以下:
Swift
(6)init(cString:encoding:)方法能夠從一個C語言字符串得到元素,經過這些元素對字符串進行建立和初始化,其語法形式以下:
convenience init?(cString nullTerminatedCString: UnsafePointer<Int8>, encoding: UInt)
其中,nullTerminatedCString用來指定一個常量指針,encoding是nullTerminatedCString的編碼。
【示例1-14】如下將使用init(cString:encoding:)方法建立和初始化字符串。
import Foundation
var str=NSString(cString: "Hello",encoding: String.Encoding.utf8.rawValue)
print(str!)
運行結果以下:
Hello
Swift3.0語言教程使用指針建立和初始化字符串