如何导致NSString的dataUsingEncoding:方法返回nil?

Luk*_*asz 2 string error-handling encoding ios swift

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

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

我必须写一个单元测试来检查它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")
        }
    }
Run Code Online (Sandbox Code Playgroud)

但提到的错误仍然没有被抛出.字符串的任何创意都不可转换为UTF8编码?

rma*_*ddy 7

Any NSString可以编码为UTF-8,因此无法nil使用该编码.

nil从该NSString dataUsingEncoding方法获得的唯一方法是使用不支持给定字符串的编码,例如带有包含表情符号字符的字符串的ASCII编码.