Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
String 如何从Swift 1.2中的字符串中提取字符串?_String_Swift_Ios8 - Fatal编程技术网

String 如何从Swift 1.2中的字符串中提取字符串?

String 如何从Swift 1.2中的字符串中提取字符串?,string,swift,ios8,String,Swift,Ios8,我有一串这样的字:“我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识“六个白色空间”表示的是一种劳动,有损于柏拉图的辉煌,后一种是快速的状态,前一种是

我有一串这样的字:“我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识,我的知识“六个白色空间”表示的是一种劳动,有损于柏拉图的辉煌,后一种是快速的状态,前一种是区域性的,不,前一种是家庭生活,后一种是生活方式

字符串:“Constitto,et ius amet feugiat dolores.Eam simul nominavi et,graece Tracatos qui ea,vim nisl lucilius contentiones ne.”以开头隔开:“(10个空格)和结尾:“(6个空格)是我需要提取和加粗的标题。 我可以使用NSAttributedString使用粗体部分,但是我无法理解提取部分

我为Swift 1.2尝试了以下SO解决方案:

如果我改为使用:

var fullName = "First Last and bla bla bla..."
它以某种方式工作……但当使用预定义变量时,它就不工作了

我还尝试:

并得到一个类似的错误:“无法调用…”

我还尝试使用:

var allContentStringsBeforeBoldTextArray = temporaryContent.componentsSeparatedByString("              ")
    var boldContent = allContentStringsBeforeBoldTextArray[0].componentsSeparatedByString("        ")

    println(" String count   \(allContentStringsBeforeBoldTextArray.count)")
    println(" Bold string count   \(boldContent.count)")
数组计数不是2,而是arrayCount=1,在某个地方我丢失了字符串的另一半

老实说,我不敢相信,对于一个简单的对象,比如一个字符串(一个字符数组),苹果有这么多的类…从String、NSString、NSAttributedString。这些类中的每一个对于同一个操作都没有相同的方法名。我对Swift是新手,但它过于复杂了

更新1

测试代码:

    override func viewDidLoad()
{
    super.viewDidLoad()

    // goal string = "HEADER"

    var startingStringSeparator = "          " // 10 whitespaces
    var endingHeaderSeparator = "      " // 6 whitespace

    var exampleStringNS:NSString = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

     var exampleStringSwift:String = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

    // *
    // 1. TEST RUN

    var splitResultString = split(exampleStringSwift as String) {$0 == startingStringSeparator}
    // ERROR: Cannot invoke split with argument list of type (String,(...)->...)"    
    // *

    // **
    // 2. TEST RUN
    var fullName = "First Last and bla          bla bla..."
    var fullNameArr = split(fullName) {$0 == " "}
    var firstName: String = fullNameArr[0]
    var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil

    println(firstName)
    println(lastName)
    // OUTPUT LINE1: First
    // OUTPUT LINE2: Optional("Last")
    // **

    //***
    // 3. TEST RUN - same as TEST RUN 2 but with 10 whitespaces

    var fullNameArr1 = split(fullName) {$0 == "          "}
    var firstName1: String = fullNameArr1[0]
    var lastName1: String? = fullNameArr1.count > 1 ? fullNameArr1[1] : nil

    println(firstName1)
    println(lastName2)
    // ERROR: Cannot invoke split with argument list of type (String,(...)->...)"
    // ***

}
更新2:

    override func viewDidLoad()
{
    super.viewDidLoad()

    // goal string = "HEADER"

    var startingStringSeparator = "          " // 10 whitespaces
    var endingHeaderSeparator = "      " // 6 whitespace

    var exampleStringNS:NSString = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

    var exampleStringSwift:String = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

    // *
    // 1. TEST RUN

    var exampleStringNS_Arr = exampleStringSwift.componentsSeparatedByString(startingStringSeparator)
    var exampleStringNS_BoldText_Arr = exampleStringNS_Arr[1].componentsSeparatedByString(endingHeaderSeparator)

    println(exampleStringNS_Arr[0])
    println(exampleStringNS_Arr[1])

    println(" **** ")
    println(exampleStringNS_BoldText_Arr[0])
    println(" **** ")
    //
    // *
}
一般工作解决方案:

    override func viewDidLoad()
{
    super.viewDidLoad()

    // goal string = "HEADER"

    var startingStringSeparator = "          " // 10 whitespaces
    var endingHeaderSeparator = "      " // 6 whitespace

    var exampleStringNS:NSString = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

    var exampleStringSwift:String = "Lorem ipsum dolor sit amet, his in ipsum latine, duo no quod vocent delenit. Mei nibh eros ut, elit ancillae ei cum,          HEADER      omnium cotidieque liberavisse his te. Aeque elitr ne cum, vis eu cibo ornatus alienum."

    // *
    // 1. TEST RUN

    var exampleStringNS_Arr = exampleStringSwift.componentsSeparatedByString(startingStringSeparator)
    var exampleStringNS_BoldText_Arr = exampleStringNS_Arr[1].componentsSeparatedByString(endingHeaderSeparator)

    println(exampleStringNS_Arr[0])
    println(exampleStringNS_Arr[1])

    println(" **** ")
    println(exampleStringNS_BoldText_Arr[0])
    println(" **** ")
    //
    // *
}

此解决方案有效,但在我的情况下不行。原因是我的JSON解析文本格式不一致。我使用了错误的方法。拆分只能基于一个字符,而不能基于字符数组(字符串)进行拆分。感谢@Martin R为我澄清了这一点,并为我指明了正确的方向。

您可以使用substringWithRange方法。它需要一个开始和结束字符串。Index

var str = "Hello, playground"
    str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) //"Hello, playground
试试这个。这可能有助于从字符串中提取字符串

编辑的u部分将获得角色的位置

var loc = "abcdefghi".rangeOfString("c").location
NSLog("%d", loc);
这也行得通

var myRange: NSRange = "abcdefghi".rangeOfString("c")
var loc = myRange.location
NSLog("%d", loc);

“它以某种方式起作用……但当使用预定义变量时,它就不起作用了。”你能发布一个(小的)自包含的示例来说明问题吗?–“并得到一个类似的错误:“无法调用…”“请发布完全准确的错误消息。如果
fullNameArr
是一个Swift字符串,那么您的第一个示例应该都可以运行。如果它是一个NSString,那么您必须显式地转换它,例如
var fullNameArr=split(fullName as String){$0==”“}
。再次阅读您的问题,我觉得
split()
是错误的工具。使用
rangeOfString
查找十个空格/六个空格或使用正则表达式可能更好。也许您可以使用以下方法:。确定,使用:var allContentStringsBeforeBoldTextArray=split(ContentConvertedString作为字符串){$0=''会给出错误:“无法使用类型为(String,(…)->…)的参数列表调用拆分”好的,现在您已经显示了真正的问题。
split(exampleStringSwift as String){$0==startingStringSeparator}
不起作用,因为
split()
只能在单个字符上分离,不能在字符串上分离。正如我前面所说,这可能是错误的工具。我已经做了这样的事情,但在这种情况下,我需要找到字符串的正确位置。你能用一个函数来编辑答案以查找索引吗?我目前正在尝试让拆分函数工作,如果它是po的话(对于我的情况)我会试试。希望它对“ccc”(多字符)有效。var str:String=“你好,游乐场”让range=range(开始:advance(str.startIndex,1),结束:advance(str.startIndex,8))//它会返回“ello,p”
var loc = "abcdefghi".rangeOfString("c").location
NSLog("%d", loc);
var myRange: NSRange = "abcdefghi".rangeOfString("c")
var loc = myRange.location
NSLog("%d", loc);