【问题标题】:Can't cast to NSMutableString in Swift无法在 Swift 中转换为 NSMutableString
【发布时间】:2018-07-06 12:36:44
【问题描述】:

我有这样的 Swift 结构:

if(isSearching == true){
    let contactDict :NSDictionary = self.filteredArray?.object(at: indexPath.row) as! NSDictionary;
    let strArray :NSArray = contactDict.object(forKey: kName) as! NSArray
    nameString = strArray.componentsJoined(by: "") as! NSMutableString

    //nameString = (contactDict.object(forKey: kName) as? String as! NSMutableString)
    companyNameString = (contactDict.object(forKey: kCompanyName) as AnyObject).object(at: 0) as? NSString;
    designationString = (contactDict.object(forKey: kDesignation) as AnyObject).object(at: 0) as? NSString;
    profileImage = contactDict.object(forKey: kProfilePic) as? UIImage;
    connectStatus = contactDict.value(forKey: kLinkStatus) as? NSString;

    if(profileImage?.accessibilityIdentifier == "Img_placeholder"){
        profileImage = nil;
    }

错误显示如下:

无法将“NSTaggedPointerString”(0x1b5b89900)类型的值转换为“NSMutableString”(0x1b5b959c0)

我该如何解决这个问题?

【问题讨论】:

  • 在 Swift 中使用 Objective-C 类型很痛苦。改用 Swift 字典、Swift 数组和 Swift 字符串。
  • 同意sweeper,不知道为什么ppl在swift中使用obj类型。
  • 有人写了代码 Sweeper .,我正在修复错误并修改代码..你能简单解释一下吗?我怎样才能做到这一点?我可以在哪一行更改为 NSTaggedPointerString?
  • @PrathapReddyJakkireddy:你看到我下面的帖子了吗?
  • 其实,这段代码是有人写的,我在 Xcode 9.2 中转换为 swift 4。这些类型的错误即将到来。

标签: swift nsmutablestring


【解决方案1】:

如果您需要 nameString 成为 NSMutableString,那么试试这个:

nameString: NSMutableString = strArray.componentsJoined(by:"").mutableCopy()

【讨论】:

  • 很高兴能为您提供帮助。如果这解决了您的问题,请接受答案。
  • 它工作正常@user2782993。但是,它不会过滤记录。
  • 您需要提供过滤代码,这部分代码在您提供的那个是看不到的。您还应该为此发布一个新问题并解释到目前为止您尝试过的内容等。
  • 谢谢@user2782993.,让strArray :NSArray = self.filteredArray?.object(at: indexPath.row) 为! NSArray;像这样显示的错误无法将类型“__NSDictionaryM”(0x1b5b8a800)的值转换为“NSArray”(0x1b5b89950)
  • 你真的应该发布一个新问题!问题是您的 strArray 包含 NSDictionary 对象。您需要将该行改回:let strArray: NSDictionary = self.filteredArray?.object(at: indexPath.row) as! NSDictionary 或简单地let strArray = self.filteredArray?.object(at: indexPath.row) as! NSDictionary。我不知道您为什么在评论中发布带有 NSArray 的行。请提出一个新问题。了解铸造对象。如果你继续在这里,你会激怒很多人,我也不应该继续在 cmets 在这里帮助你。
【解决方案2】:

错误来自

nameString = strArray.componentsJoined(by: "") as! NSMutableString

因为你不能在这里沮丧。 NSTaggedPointerStringNSString 的(私有)子类,但不是 NSMutableString 的子类。您应该创建一个新的可变字符串:

nameString = NSMutableString(string: strArray.componentsJoined(by: ""))

但正如@Sweeper 在 cmets 中所说,最好使用 Swift 字符串。

【讨论】:

  • 是的@clemens。,现在。,它显示像这样的错误参数标签'(_:)'不匹配任何可用的重载。 – Prathap Reddy Jakkireddy
猜你喜欢
  • 2020-01-29
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多