Swift在一个字符的第一个匹配处分割string

我想在Swift中创build一个iOS应用程序,这需要我在一行的第一个冒号(:)分割一行文本。 我试过在string上使用componentsSeparatedByString方法,但除了得到一个错误,指出“'NSString'没有名为'componentSeparatedByString'的成员”,该方法实际上并没有做我想要的。

对于更多的上下文,我试图在游戏中分开一条线,那就是forms

<character name> : <line> 

进入angular色的名字和行。 我假设angular色的名字中没有冒号,所以我想在行中的第一个冒号处进行分割,这样,如果文本中有冒号,我就不会把行的文本分割成几部分。

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

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

而我的第二个问题是:如何将string分割成冒号(:)字符的第一个字符,而不是所有的匹配字符?

首先

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

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

第二

你可以使用内build的split函数来指定maxSplit

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

请注意,结果的types是[String] 。 如果你想[NSString] ,只是施展它:

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

Swift 2与分裂function的回答(Swift 3使用maxSplit S参数,只需添加“s”):

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