【问题标题】:How to cause NSString's dataUsingEncoding: method return nil?如何导致 NSString 的 dataUsingEncoding: 方法返回 nil?
【发布时间】:2016-08-27 08:35:24
【问题描述】:

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

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 编码的字符串有什么创意吗?

【问题讨论】:

    标签: ios string swift encoding error-handling


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      相关资源
      最近更新 更多