第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

你如何使用String.substringWithRange?

你如何使用String.substringWithRange?

你如何使用String.substringWithRange?(或者,Ranges如何在Swift中工作?)我還沒(méi)有弄清楚如何String在Swift中獲取a的子串:var str = “Hello, playground”func test(str: String) -> String {  return str.substringWithRange( /* What goes here? */ )}test (str)我無(wú)法在Swift中創(chuàng)建一個(gè)Range。游樂(lè)場(chǎng)中的自動(dòng)填充功能并不是非常有用 - 這就是它的建議:return str.substringWithRange(aRange: Range<String.Index>)我沒(méi)有在Swift標(biāo)準(zhǔn)參考庫(kù)中找到任何有幫助的內(nèi)容。這是另一個(gè)瘋狂的猜測(cè):return str.substringWithRange(Range(0, 1))還有這個(gè):let r:Range<String.Index> = Range<String.Index>(start: 0, end: 2)return str.substringWithRange(r)我已經(jīng)看到其他答案(查找Swift字符串中的字符索引)似乎表明,因?yàn)樗黃tring是一種橋接類(lèi)型NSString,“舊”方法應(yīng)該有效,但是不清楚如何 - 例如,這也不起作用(似乎不是有效的語(yǔ)法):let x = str.substringWithRange(NSMakeRange(0, 3))思考?
查看完整描述

3 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用substringWithRange方法。它需要一個(gè)開(kāi)始和結(jié)束String.Index。

var str = "Hello, playground"str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) //"Hello, playground"

要更改開(kāi)始和結(jié)束索引,請(qǐng)使用advancedBy(n)。

var str = "Hello, playground"str.substringWithRange(Range<String.Index>(start: str.startIndex.advancedBy(2), end: str.endIndex.advancedBy(-1))) //"llo, playgroun"

你仍然可以在NSRange中使用NSString方法,但是你必須確保使用這樣的NSString:

let myNSString = str as NSStringmyNSString.substringWithRange(NSRange(location: 0, length: 3))

注意:正如JanX2所提到的,第二種方法對(duì)于unicode字符串是不安全的。


查看完整回答
反對(duì) 回復(fù) 2019-07-31
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

斯威夫特2

簡(jiǎn)單


let str = "My String"

let subStr = str[str.startIndex.advancedBy(3)...str.startIndex.advancedBy(7)]

//"Strin"

斯威夫特3

let startIndex = str.index(str.startIndex, offsetBy: 3)

let endIndex = str.index(str.startIndex, offsetBy: 7)


str[startIndex...endIndex]       // "Strin"

str.substring(to: startIndex)    // "My "

str.substring(from: startIndex)  // "String"

斯威夫特4

substring(to:)并且substring(from:)已棄用Swift 4。


String(str[..<startIndex])    // "My "

String(str[startIndex...])    // "String"

String(str[startIndex...endIndex])    // "Strin"


查看完整回答
反對(duì) 回復(fù) 2019-07-31
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

對(duì)這種方法的權(quán)衡取得了一些非常有見(jiàn)地的觀點(diǎn),尤其是隱藏的性能影響。字符串不是簡(jiǎn)單的野獸,并且到達(dá)特定索引可能花費(fèi)O(n)時(shí)間,這意味著使用下標(biāo)的循環(huán)可以是O(n ^ 2)。你被警告了。

您只需添加一個(gè)新subscript功能,該功能需要一個(gè)范圍并用于advancedBy()步行到您想要的位置:

import Foundationextension String {
    subscript (r: Range<Int>) -> String {
        get {
            let startIndex = self.startIndex.advancedBy(r.startIndex)
            let endIndex = startIndex.advancedBy(r.endIndex - r.startIndex)

            return self[Range(start: startIndex, end: endIndex)]
        }
    }}var s = "Hello, playground"println(s[0...5]) // ==> "Hello,"
    println(s[0..<5]) // ==> "Hello"

為了好玩,您還可以+在索引上添加運(yùn)算符:


func +<T: ForwardIndex>(var index: T, var count: Int) -> T {

  for (; count > 0; --count) {

    index = index.succ()

  }

  return index

}


s.substringWithRange(s.startIndex+2 .. s.startIndex+5)

(我還不知道這個(gè)是否應(yīng)該成為該語(yǔ)言的一部分。)


查看完整回答
反對(duì) 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 1085 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)