Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 字符串组件由字符串do分离一次_Ios_String_Swift_Split - Fatal编程技术网

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"