Swift在一个角色的第一场比赛时分裂

时间:2014-11-28 02:59:21

标签: ios string swift

我正在尝试在Swift中创建一个iOS应用程序,它要求我在一行的第一个冒号(:)中拆分一行文本。我已经尝试在字符串上使用componentsSeparatedByString方法,但除了收到错误声明“'NSString'没有名为'componentSeparatedByString'的成员”之外,该方法实际上并没有按我的意愿行事。

对于更多的上下文,我试图在游戏中分隔一行,其形式为

<character name> : <line>

进入角色的名字和行。我假设角色的名字中没有冒号,所以我想在该行的第一个冒号处拆分,这样如果文本中有任何冒号,我就不会将该行的文本拆分成碎片。

所以,我的第一个问题:为什么不使用'componentsSeparatedByString'在以下代码中有效:(以下代码不是我之前提到的情况,但它是我想要修复并保留的东西,所以我想用它代替冒号代码。)

var fileRoot = NSBundle.mainBundle().pathForResource("LonelyImpulse", ofType: "txt")
    var contents = NSString(contentsOfFile:fileRoot!, encoding: NSUTF8StringEncoding, error: nil)!
    let stringArray = contents.componentSeparatedByString("\n")

我的第二个:我怎样才能在冒号(:)字符的第一个匹配中拆分字符串,而不是沿着所有匹配?

3 个答案:

答案 0 :(得分:7)

第一个

这只是一个错字,不是componentSeparatedByString,而是componentsSeparatedByString

let stringArray = contents.componentsSeparatedByString("\n")
//                                  ^ 

第二次

您可以使用内置split功能,该功能可以指定maxSplit

let str:NSString = "test:foo:bar"
let result = split(str as String, { $0 == ":" }, maxSplit: 1, allowEmptySlices: true)
// -> ["test", "foo:bar"]

请注意,结果的类型为[String]。如果你想要[NSString],只需投下它:

let result:[NSString] = split(string as String, { $0 == ":" }, maxSplit: 1, allowEmptySlices: true)
//        ^^^^^^^^^^^

答案 1 :(得分:6)

Swift 2使用拆分功能回答(对于Swift 3使用maxSplit S 参数,只需添加“s”):

let fullString = "A B C"
let splittedStringsArray = fullString.characters.split(" ", maxSplit: 1).map(String.init)
print(splittedStringsArray) // ["A","B C"]

答案 2 :(得分:1)

迅速4.2答案:

let str = "Hello, this is, a,  playground"
let splitStringArray = str.split(separator: ",", maxSplits: 1).map(String.init)

print(splitStringArray) // ["Hello", " this is, a,  playground"]