ios - 如何导致NSString的dataUsingEncoding : method return nil?

标签 ios string swift encoding error-handling

我有一个方法(初始化程序)需要测试:

public convenience init(jsonString: String, identifier: String, editable: Bool) throws {

        if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) {
            try self.init(jsonData: data, identifier: identifier, editable: editable)

        } else {
            throw ToggleSetJSONStringError.JSONStringEncodingError
        }
    }

我必须编写一个单元测试来检查它是否正确抛出任意 JSONStringEncodingError。我很难想出这种情况何时会发生。我知道 dataUsingEncoding: 将在字符串无法转换为目标编码时返回 nil 但我不知道实际上是如何导致的。我试过了,f.ex.:

func testThatItThrowsJSONStringEncodingErrorWhenInitializedWithJSONNotConvertibleToUTF8String() {

        let jsonNonConvertibleString = "🐱🇩🇪"
        do {
            let _ = try ToggleSet.init(jsonString: jsonNonConvertibleString, identifier: "not relevant here", editable: true)
            XCTFail("ToggleSetError.JSONStringError error should be thrown.")

        } catch  let e as ToggleSetJSONStringError {
            XCTAssertEqual(e, ToggleSetJSONStringError.JSONStringEncodingError)
        }
        catch {
            XCTFail("Wrong error thrown, should be: ToggleSetError.JSONStringEncodingError")
        }
    }

但是仍然没有抛出上述错误。对于不可转换为 UTF8 编码的字符串有什么创意吗?

最佳答案

任何 NSString 都可以编码为 UTF-8,因此无法使用该编码获得 nil

NSString dataUsingEncoding 方法获取 nil 的唯一方法是使用不支持给定字符串的编码,例如 ASCII 编码,字符串包含表情符号字符。

关于ios - 如何导致NSString的dataUsingEncoding : method return nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984807/

相关文章:

ios - Xcode 9.2 使用 Firebase 生成警告

ios - 如何使用 FMDB 删除特定表的列?

swift - Swift 中的 localizeWithFormat 和可变参数

javascript - 带有字符串键的映射,其中值是 Javascript 中的长整对数组?

string - 如何在 Scala 字符串中找到 Id 的出现

ios - Swift 3 - 如何让计时器在后台工作

swift - 如何调用这样的快速函数?

iOS PWA "Add to Home Screen"- 禁用全屏模式

ios - 使用swift在图像上叠加文字

c - 如何在 C 中的两个子字符串之间找到第 n 个子字符串?