arrays - 如何在 Swift 中使用可选变量拆分多行字符串文字

标签 arrays swift macos cocoa swift4

我正在尝试获取某个类中包含的与全局变量匹配的元素的索引。使用 CSS 查询搜索节点会给我一个包含潜在匹配元素的列表,但是 — 作为 Kanna’s documentation指出 — 这样的查询返回充当数组的 XPathObjects。我能看到从所述列表中获取索引值的唯一方法是将其从数组转换为字符串,然后可以用新行拆分;但是,我似乎无法让列表采用字符串值。典型编译 session 日志的相关部分如下:

Kazuo®/Ishiguro® Auprès® (2 pack)
Orange
Kazuo®/Ishiguro® Auprès® Folio Toujours (2 Pack)
Blue
…

我已经尝试了 this thread 中一位海报建议的三种方法连接上面的输出:

1). componentsSeparatedByCharactersInSet

for node in (doc?.css("a[class^='product-link']"))! {
    let multiLineString = node.text!
    let newlineChars = NSCharacterSet.newlineCharacterSet()
    let lineArray = multiLineString.componentsSeparatedByCharactersInSet(newlineChars).filter{!  $0.isEmpty}
}   

理想情况下,这将打印[Kazuo®/Ishiguro® Auprès®(2 件装),橙色,Kazuo®/Ishiguro® Auprès® Folio Toujours(2 件装),蓝色];它会引发错误。单击 fix 会导致另一个错误 — 又一个错误。

2). split

for node in (doc?.css("a[class^='product-link']"))! { 
    let multiLineString = node.text!
    let newlineChars = NSCharacterSet.newlineCharacterSet()
    let lineArray = multiLineString.utf16.split { newlineChars.characterIsMember($0) }.flatMap(String.init)
}

产生与 componentsSeparatedByCharactersInSet 相同的结果:无法调用非函数类型 'CharacterSet' 的值 -> 修复 -> 错误 -> 修复 -> 错误。

3).枚举线

for node in (doc?.css("a[class^='product-link']"))! {             
    let multiLineString = node.text!
    var lineArray = [String]()
    multiLineString.enumerateLines { (line, stop) -> () in
        lineArray.append(line)
    }
}

这个解决方案实际上是构建的,但是它将每个列表项作为 function() 返回。

当我在 Playgrounds 中对简单的多行字符串文字尝试这些方法时,这些方法有效,但出于某种原因,它们不适用于上面的输出。解决此问题的最简单方法是使用 func index(of element: Element) -> Int?,但这样做会给我一个 Cannot convert value of type 'String' to expected参数类型“字符” 错误。我是 Swift 的新手,所以如果有更多经验的人可以提出解决这个问题的替代方法,我将不胜感激!

最佳答案

关于您的更大目标,您应该如何着手解决问题:

var prodIndex = 0
var testProd = "Prod" // to be replaced by user input

for node in (doc?.css("a[class^='name-link']"))! {
    let words = testProd.split(separator: " ")
    if prodIndex % 2 == 0 {
        if node.text! == testProd {
            print("FOUND: " + testProd)
        }

        prodIndex += 1
    }
}

关于arrays - 如何在 Swift 中使用可选变量拆分多行字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48047425/

相关文章:

ios - WKWebView 内容的顶部被剪裁在 Mac Catalyst 中的 NSToolbar 下

php - 将数组插入数据库中的不同行

c - C中的频率分析,如何获取数组中的整个ascii表?

ios - 行的 CoreData 更新导致空行的插入

swift - 如何在 Swift 中使用 CG 方法为高度纹理图像中的文本添加凹凸效果

macos - 不同的类(class)一起工作

arrays - 将 Array 作为参数传递给函数时出现“[String].Type”错误

php - 仅将默认数字关联数组键更改为 "number",而不影响数组值

ios - 推送通知 - 使用 SceneDelegate 在通知点击时推送 ViewController

macos - 在山狮上安装 scipy 失败