我得到編譯器錯誤在這行:如何在Swift中使用substringToIndex?
UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8)
類型「String.Index」不符合協議「IntegerLiteralConvertible」
我的目的是讓子,但如何?
我得到編譯器錯誤在這行:如何在Swift中使用substringToIndex?
UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8)
類型「String.Index」不符合協議「IntegerLiteralConvertible」
我的目的是讓子,但如何?
在Swift中,String
索引尊重字形集羣,並且IndexType
不是Int
。您有兩種選擇 - 將字符串(您的UUID)轉換爲NSString,並將其用作「before」,或者爲第n個字符創建索引。
兩者都如下所示:
然而,該方法已經夫特版本之間徹底改變。讀下來以後的版本...
斯威夫特1
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substringToIndex(5) // "Stack"
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index
let index: String.Index = advance(s.startIndex, 5)
let ss2:String = s.substringToIndex(index) // "Stack"
CMD-點擊substringToIndex
容易混淆帶你到NSString
定義,但是CMD-點擊String
,你會發現以下內容:
extension String : Collection {
struct Index : BidirectionalIndex, Reflectable {
func successor() -> String.Index
func predecessor() -> String.Index
func getMirror() -> Mirror
}
var startIndex: String.Index { get }
var endIndex: String.Index { get }
subscript (i: String.Index) -> Character { get }
func generate() -> IndexingGenerator<String>
}
夫特2
作爲commen tator @DanielGalasko指出advance
現在已經改變了......
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substringToIndex(5) // "Stack"
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index
let index: String.Index = s.startIndex.advancedBy(5) // Swift 2
let ss2:String = s.substringToIndex(index) // "Stack"
斯威夫特3
在斯威夫特3,它再次改變:
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substring(to: 5) // "Stack"
let index: String.Index = s.index(s.startIndex, offsetBy: 5)
var ss2: String = s.substring(to: index) // "Stack"
斯威夫特4
在斯威夫特4,又一次變化:
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substring(to: 5) // "Stack"
let index: String.Index = s.index(s.startIndex, offsetBy: 5)
var ss3: Substring = s[...index] // "Stack"
var ss4: String = String(s[...index]) // "Stack"
更優雅的解決方案**(** UIDevice.currentDevice()。identifierForVendor.UUIDString ** as NSString)**。substringToIndex(8) - 需要轉換類型 –
對於基於標題來到這裏的人來說,假定的重複不是很很有幫助。 – Suragch