簡體   English   中英

Swift 3:如何進行字符串范圍?

[英]Swift 3: How to do string ranges?

昨晚我不得不將我的Swift 2.3代碼轉換為Swift 3.0,轉換后我的代碼很亂。 在Swift 2.3中,我有以下代碼:

let maxChar = 40;
let val = "some long string";
var startRange = val.startIndex;
var endRange = val.startIndex.advancedBy(maxChar, limit: val.endIndex);
let index = val.rangeOfString(" ", options: NSStringCompareOptions.BackwardsSearch , range: startRange...endRange , locale: nil)?.startIndex;

Xcode將我的代碼轉換為不起作用的代碼:

let maxChar = 40;
let val = "some long string";
var startRange = val.startIndex;
var endRange = val.characters.index(val.startIndex, offsetBy: maxChar, limitedBy: val.endIndex);
let index = val.range(of: " ", options: NSString.CompareOptions.backwards , range: startRange...endRange , locale: nil)?.lowerBound

錯誤在val.rage的參數range ,說沒有'...'候選產生預期的上下文結果類型'Range?'

我嘗試使用Range(startRange...endRange)作為文檔中的建議,但我得到錯誤說: connot使用類型的爭論列表(ClosedRange)調用類型ClosedRange <_>的initiliazer 好像我錯過了一些基本的東西。

任何幫助表示贊賞。 謝謝!

簡單回答:你缺少的基本要素是現在一個封閉的范圍與范圍不同。 因此,將startRange...endRange更改為startRange..<endRange

更詳細地說,這是代碼的縮寫版本(沒有maxChar部分):

let val = "some long string";
var startRange = val.startIndex;
var endRange = val.endIndex;
let index = val.range(
    of: " ", options: .backwards, range: startRange..<endRange)?.lowerBound
// 9

現在,您可以將其用作恢復實際所需功能的基礎。


但是,如果您只想拆分字符串,那么重新發明輪子有點愚蠢:

let arr = "hey ho ha".characters.split(separator:" ").map{String($0)}
arr // ["hey", "ho", "ha"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM