【问题标题】:How to convert Strings in Swift?如何在 Swift 中转换字符串?
【发布时间】:2018-08-12 22:49:48
【问题描述】:

我有两种情况需要将字符串转换为不同的格式。

例如:

case 1:
  string inputs: abc, xyz, mno, & llr   // All Strings from a dictionary
  output: ["abc","xyz", "mno", "llr"]  //I need to get the String array like this.

但是当我使用这段代码时:

 var stringBuilder:[String] = [];
 for i in 0..<4 {
   stringBuilder.append("abc"); //Appends all four Strings from a Dictionary
 }

print(stringBuilder); //Output is 0: abc, 1:xyz like that, how to get desired format of that array like ["abc", "xyz"];

实际用法:

let arr = Array(stringReturn.values);
//print(arr)  // Great, it prints ["abc","xyz"];
let context = JSContext()
context?.evaluateScript(stringBuilder)   
let testFunction = context?.objectForKeyedSubscript("KK")
let result = testFunction?.call(withArguments:arr); // Here when I debugger enabled array is passed to call() like 0:"abc" 1:"xyz". where as it should be passed as above print.

其次,如何在 swift 中替换转义字符:我在 replaceOccurances(of:"\\'" with:"'"); 中使用了“\”,但它没有改变。为什么以及如何逃避该序列。

case 2:
  string input: \'abc\'
  output: 'abc'

【问题讨论】:

  • 您可以编辑您的问题以包含您的字典的定义吗?
  • var stringReturn:Dictionary = Dictionary();是定义。
  • 甚至 [String:Any] 也打印相同的 na

标签: arrays swift swift3 swift-string


【解决方案1】:

要将字典的所有值作为数组获取,您可以使用字典的 values 属性:

let dictionary: Dictionary<String, Any> = [
    "key_a": "value_a",
    "key_b": "value_b",
    "key_c": "value_c",
    "key_d": "value_d",
    "key_e": 3
]

let values = Array(dictionary.values)
// values: ["value_a", "value_b", "value_c", "value_d", 3]

使用filter,您可以忽略字典中所有不属于String 类型的值:

let stringValues = values.filter({ $0 is String }) as! [String]
// stringValues: ["value_a", "value_b", "value_c", "value_d"]

您可以使用 map 转换 stringValues 的值并应用您的 replacingOccurrences 函数:

let adjustedValues = stringValues.map({ $0.replacingOccurrences(of: "value_", with: "") })
// adjustedValues: ["a", "b", "c", "d"]

【讨论】:

  • 你的输出是这样的: LazyMapCollection, Any>(_base: ["key_a": "value_a", "key_b": "value_b"]
  • 好奇怪。在发布之前,我针对 Swift 3.2 和 Swift 4 测试了我的代码。也许您在设置中遗漏了一些信息?
  • 当我打印它打印的值时 ["abc", "xyz"] 但是当我像 find(values) 一样传递它时,在达到调试点之后,它显示为 0:abc, 1:xyz
  • 那是因为索引 0 处的值具有值 abc 而索引 1 处的值具有 xyz 我在这里看不到问题。也许你可以通过扩展你的问题告诉我们更多你想要完成的事情。
  • 查看更新的问题。 call() 需要一个类似 ["xyz","abc"] 的数组
【解决方案2】:

为什么不尝试这样的事情呢?对于问题的第 1 部分:

var stringReturn: Dictionary = Dictionary<String,Any>()
stringReturn = ["0": "abc","1": "def","2": "ghi"]
print(stringReturn)

var stringBuilder = [String]()
for i in stringReturn {
  stringBuilder.append(String(describing: i.value))
}
print(stringBuilder)

另外,除非我没记错,否则第 2 部分似乎很简单

var escaped: String = "\'abc\'"
print(escaped)

【讨论】:

    【解决方案3】:

    案例 1: 我已经实施了这个解决方案,希望这能解决你的问题

       let dict: [String: String] = ["0": "Abc", "1": "CDF", "2": "GHJ"]                
       var array: [String] = []
    
    for (k, v) in dict.enumerated() {
        print(k)
        print(v.value)
        array.append(v.value)  
    }
    print(array)
    

    案例 2:

        var str = "\'abc\'"
        print(str.replacingOccurrences(of: "\'", with: ""))
    

    【讨论】:

    • 我需要一个格式为 ["abc","xyz","mno"] 的数组,您的代码将在其中生成这个。
    • 请仔细阅读我的问题。我已经做了你发布的内容。
    猜你喜欢
    • 2019-02-17
    • 2014-09-23
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多