gpt4 book ai didi

swift - 使用 NSObject 上的简单 Swift 扩展编译错误

转载 作者:搜寻专家 更新时间:2023-11-01 05:43:24 24 4
gpt4 key购买 nike

我正在尝试编写一组扩展,使处理 JSON 对象变得更加简单。这是我设置的扩展代码示例:

import Foundation

extension NSData {
var JSONObject: AnyObject? {
return parseJSONObject(self)
}
}

extension String {
var JSONObject: AnyObject? {
return self.dataUsingEncoding(NSUTF8StringEncoding).JSONObject
}
}

func parseJSONObject(object: NSData) -> AnyObject? {
var error: NSError?
var result : AnyObject? = NSJSONSerialization.JSONObjectWithData(object as NSData, options: NSJSONReadingOptions.MutableContainers, error: &error)

if error {
println("Error parsing JSON object from: \(object)");
}

return result
}

此代码在我将它用于 String 对象时有效,但它不适用于此文件外部的 NSData 对象。奇怪的是 String 扩展调用 NSData 扩展代码并且在文件中工作正常。有谁知道可能是什么问题?

import XCTest

let testJSONString = "{\"foo\":\"bar\"}"

class JSONTests: XCTestCase {
let testJSONData = testJSONString.dataUsingEncoding(NSUTF8StringEncoding)

override func setUp() {
super.setUp()
}

override func tearDown() {
super.tearDown()
}

// This test compiles with no problem, as I am using the extension on a Swift String.
func testParseString() {
var fooValue: String? = testJSONString.JSONObject!["foo"] as? String
XCTAssertTrue(fooValue == "bar", "Value for key 'foo' should be 'bar' for parsed JSON string")
}

// This method causes a compiler error I assume, because I am using the NSData extension
func testParseData() {
var fooValue: String? = testJSONData.JSONObject!["foo"] as? String
XCTAssertTrue(fooValue == "bar", "Value for key 'foo' should be 'bar' for parsed JSON string")
}
}

这是我看到的错误:

CompileSwift normal i386 com.apple.xcode.tools.swift.compiler
cd /Users/phogan/Software/BanDedo/SwiftKit
export PATH="/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode6-Beta.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -target i386-apple-ios8.0 -module-name SwiftKitTests -O0 -sdk /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk -g -module-cache-path /Users/phogan/Library/Developer/Xcode/DerivedData/ModuleCache -I /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator -F /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks -c -j8 /Users/phogan/Software/BanDedo/SwiftKit/SwiftKit/Application/PlanckTags.swift /Users/phogan/Software/BanDedo/SwiftKit/Belt/JSON.swift /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Belt/JSONTests.swift /Users/phogan/Software/BanDedo/SwiftKit/Planck/Planck.swift /Users/phogan/Software/BanDedo/SwiftKit/Belt/RingBuffer.swift /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Planck/PlanckTests.swift /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Belt/RingBufferTests.swift -output-file-map /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/SwiftKitTests-OutputFileMap.json -serialize-diagnostics -emit-dependencies -emit-module -emit-module-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/SwiftKitTests.swiftmodule -Xcc -iquote -Xcc /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-generated-files.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-own-target-headers.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-all-target-headers.hmap -Xcc -iquote -Xcc /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-project-headers.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator/include -Xcc -I/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/DerivedSources/i386 -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -DDEBUG=1 -emit-objc-header -emit-objc-header-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/SwiftKitTests-Swift.h

0 swift 0x000000010c4c0608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x000000010c4c0af4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff914b25aa _sigtramp + 26
3 libsystem_platform.dylib 0x0000000000000004 _sigtramp + 1857346164
4 swift 0x000000010b8c47b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
5 swift 0x000000010b9300d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
6 swift 0x000000010b925266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
7 swift 0x000000010b8a66f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
8 swift 0x000000010b9126e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
9 swift 0x000000010b913033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
10 swift 0x000000010b88565a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
11 swift 0x000000010b88435d main + 1533
12 libdyld.dylib 0x00007fff8d5c55fd start + 1
13 libdyld.dylib 0x0000000000000042 start + 1923328582
Stack dump:
0. Program arguments: /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c /Users/phogan/Software/BanDedo/SwiftKit/SwiftKit/Application/PlanckTags.swift /Users/phogan/Software/BanDedo/SwiftKit/Belt/JSON.swift -primary-file /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Belt/JSONTests.swift /Users/phogan/Software/BanDedo/SwiftKit/Planck/Planck.swift /Users/phogan/Software/BanDedo/SwiftKit/Belt/RingBuffer.swift /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Planck/PlanckTests.swift /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Belt/RingBufferTests.swift -enable-objc-attr-requires-objc-module -target i386-apple-ios8.0 -module-name SwiftKitTests -sdk /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk -I /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator -F /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -F /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks -g -module-cache-path /Users/phogan/Library/Developer/Xcode/DerivedData/ModuleCache -Xcc -iquote -Xcc /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-generated-files.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-own-target-headers.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-all-target-headers.hmap -Xcc -iquote -Xcc /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/SwiftKitTests-project-headers.hmap -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Products/Debug-iphonesimulator/include -Xcc -I/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/DerivedSources/i386 -Xcc -I/Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -DDEBUG=1 -emit-module-doc-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/JSONTests~partial.swiftdoc -O0 -emit-module-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/JSONTests~partial.swiftmodule -serialize-diagnostics-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/JSONTests.dia -emit-dependencies-path /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/JSONTests.d -o /Users/phogan/Library/Developer/Xcode/DerivedData/SwiftKit-btmjklrksylmiohgevkkbihmktno/Build/Intermediates/SwiftKit.build/Debug-iphonesimulator/SwiftKitTests.build/Objects-normal/i386/JSONTests.o
1. While emitting IR SIL function @_TFC13SwiftKitTests9JSONTests13testParseDatafS0_FT_T_ for 'testParseData' at /Users/phogan/Software/BanDedo/SwiftKit/SwiftKitTests/Belt/JSONTests.swift:29:5
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254

最佳答案

我遇到过类似的问题。

我有一个接受 NSString 并返回 NSData 的扩展,另一个接受 NSData 并返回 NSData 的扩展。我可以将 NSString 扩展名放在 Xcode 中的任何位置,它可以在外部文件中,在外部文件中的类、ViewController、Main、App Delegate 的任何位置旁边。我的 NSData 扩展不是这样。它只会在放置在 AppDelegate 中时运行。

我计划将我创建的所有扩展放在一个单独的文件中,或者放在与其相关类相同的文件中。但现在作为一种解决方法,NSData ext 必须存在于 App Delegate 文件中。我稍后会发布一些代码。现在这不是什么大不了的事,只是一个奇怪的现象。

// just runs in App Delegate
extension NSData {
var sha256:NSData { return myCrypto().dataToSHA256(self) }
}

// runs just in external swift file just fine.
extension String {
var hexToBytes:NSData { return myCrypto().hexToBytes(self) }
}

您可以使用伪代码,如果扩展不在根级别的 App Delegate 中,NSData 将始终出错。

关于swift - 使用 NSObject 上的简单 Swift 扩展编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24169166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com