Ios 字符串组件由字符串do分离一次
我有一个字符串:Ios 字符串组件由字符串do分离一次,ios,string,swift,split,Ios,String,Swift,Split,我有一个字符串: 让mystring=“key=value=value=value=value” 当我这样做的时候: let ar = mystring.componentsSeparatedByString("=") 我得到: [“键”、“值”、“值”、“值”、“值”] 但是我只需要拆分一次,比如组件通过字符串(“=”,1)拆分,就可以得到: ["key", "value=value=value=value"] 要做到这一点,您可能需要编写自己的自定义代码,使用NSScanner或rang
让mystring=“key=value=value=value=value”
当我这样做的时候:
let ar = mystring.componentsSeparatedByString("=")
我得到:
[“键”、“值”、“值”、“值”、“值”]
但是我只需要拆分一次,比如组件通过字符串(“=”,1)拆分,就可以得到:
["key", "value=value=value=value"]
要做到这一点,您可能需要编写自己的自定义代码,使用NSScanner
或rangeofString:options:range:
编辑:
实际上,它听起来像Swift String类的split函数,带有它的maxslit
参数,可以满足您的需要。看看普雷斯顿答案中的链接
let mystring = "key=value=value=value=value"
let result = split(mystring as String, { $0 == "=" }, maxSplit: 1, allowEmptySlices: true)
结果现在应该是[key,value=value=value=value]试试这个:(在操场上测试和工作)
这应该可以完成任务
func extract(rawData: String) -> [String]? {
let elms = rawData.characters.split("=", maxSplit: 1).map { String($0) }
guard let
key = elms.first,
value = elms.last
where elms.count == 2 else { return nil }
return [key, value]
}
例如:
let rawData = "key=value=value=value=value"
extract(rawData) // > ["key", "value=value=value=value"]
请注意,extract
函数有一个可选的字符串数组。事实上,如果输入字符串不包含至少一个=
,则返回nil
该代码已经用Swift 2.1和Xcode 7.1.1进行了测试
希望这有帮助。感谢您的回答,我找到了swift2的有效解决方案:
let mystring = "key=value=value=value=value"
mystring.characters.split(1, allowEmptySlices: true, isSeparator: { $0 == "=" }).map(String.init)
使用Swift 2.1,您可以按如下方式使用拆分功能来执行所需操作:
let result = string.characters.split("=", maxSplit: 1, allowEmptySlices: true)
测试这一点的一些示例代码如下:
let string = "key=value=value=value=value"
let result = string.characters.split("=", maxSplit: 1, allowEmptySlices: true)
print(String(result[0])) // "key"
print(String(result[1])) // "value=value=value=value"
因此,您只希望它仅为第一个“=”符号分离组件?对于我设置的数字,它可以是2,3,等等。。这就是你要做的吗,string.should是split myString,不需要强制转换为string无法将'string->Bool'类型的值转换为预期的参数类型'(-)>@Arti请尝试我的答案,我已经测试过了,在swift 2中效果很好,虽然在末尾添加映射会更简洁,例如,让result=string.characters.split(“=”,maxslit:1,allowEmptySlices:true)。map(string.init)
。然而,这种形式的分裂是如何运作的呢?SwiftDoc.org网站上SequenceType协议中对Split的描述是func Split(maxslit:Int,allowEmptySlices:Bool,@noescape isSeparator:(Self.Generator.Element)throws->Bool)rethrows->[Self.SubSequence]
。我提出的代码(同样有效)是let anArray=mystring.characters.Split(1,allowEmptySlices:false,isSeparator:{$0==“=”}).map(String.init)
同样有效的代码。只是用不同的方式编写相同的东西。我同意最后的映射会使它更干净。定义了多个拆分函数。我使用的一个在扩展集合类型中定义,其中生成器。元素:equalable
。呃。因此有两个不同的拆分函数,一个在CollectionType扩展和SequenceType集合中定义的扩展,它们采用几乎相同的参数,但不完全相同?这看起来很混乱和混乱。我确信定义了两个以上的拆分函数。大多数swift标准库对我来说都很混乱和混乱。
let string = "key=value=value=value=value"
let result = string.characters.split("=", maxSplit: 1, allowEmptySlices: true)
print(String(result[0])) // "key"
print(String(result[1])) // "value=value=value=value"