- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试编写一组扩展,使处理 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/
SWIFT代码 print("1", NSObject() == NSObject()) print("2", ObjectIdentifier(NSObject()) == ObjectIdenti
保留在 NSObject 协议(protocol)中声明。 因此NSObject类和NSProxy类实现了它。 然而 NSProxy 和 NSObject 类都有一个分配。 为什么 alloc 没有在
我有一个已在App Store中发布的应用程序。大约有1%-2%的用户报告该应用程序崩溃了。这不是完全意外的行为,因此我要求提供崩溃日志。这是最后一个异常回溯(实际显示问题的部分): Last E
我有一个自定义 NSObject 类,可以调用 People,还有一个来自 CloudMade RMMarker.h 的名为 RMMarker 的类。 RMMarker 类有一个名为 data 的属性
这是崩溃报告,不知道为什么。我使用 AFHTTPRequestOperation setCompletionBlockWithSuccess:failure: 调用电话。在完成 block 中,我得到
应用程序有时会因 [NSObject(NSObject) doesNotRecognizeSelector:] 而崩溃,选择器为 [UIImageView setImage:]。 我通过设置异常断点捕
崩溃报告: 0 CoreFoundation!__exceptionPreprocess + 0x7c 1 libobjc.A.dylib!objc_exception_throw
我正在将我的整个项目从 Objective-C 转换为 Swift...在转换时我遇到了这个问题:“无法将‘Facility’类型的值转换为预期的参数类型“Facility!” 错误出现在我提到的最后
我在将数组[String]保存到核心数据时遇到问题。在核心数据中,我设置了字段“countires”的类型 - 可转换。 我通过以下方式添加数据: filters!.countries = selec
假设您有一个返回 NSDictionary 的方法。要构建字典,您可能需要创建一个 NSMutableDictionary。返回字典的不可变副本而不是仅返回可变字典是否有任何必要或优势? 例如 - (
在一个小型 RTS 项目中,我有一个按钮列表,每个按钮都分配有一个构建对象。有些建筑物非常通用,但其他建筑物则非常特殊,因此我将某些建筑物作为子类。 当我创建一个按钮列表时,每个按钮都有一个 PEHo
这个问题在这里已经有了答案: Objective-C: Property / instance variable in category (6 个答案) Objective-C: Instance
我实际上想知道如何从 NSObject 或任何其他类访问 encodeWithCoder、init 等方法而不继承 NSObject 类。 因为我读到如果我们从 NSObject 类继承,那么它在 S
我正致力于从 Objective-C 教程转换此委托(delegate)协议(protocol)函数,但在尝试通过使用下标返回基于键的值来访问字典中的值时遇到错误。我不太确定这里的错误是什么意思。任何
在我的 Swift 应用程序中,我有一个类: open class CustomCluster : NSObject { open var coordinate = CLLocationCoo
我有一个字典/数组,看起来像这样: var myArray: [[String:NSObject]] = [] let newItem = [ [
这很奇怪,我可以使用 Xcode 5 (5A1413) 在模拟器、iPhone 4S 和 iPhone 5 中运行我的应用程序而没有任何问题,但是当我将应用程序提交到 iTunes 商店时被拒绝并且此
我使用 NSKeyedArchiver.archivedDataWithRootObject(obj) 将对象转换为 NSData。 archivedDataWithRootObject(obj) 方
背景。 请考虑以下步骤: 1) 在 Xcode 中创建一个新的“单 View 应用程序”。 2)创建类NSObject+Extension.h和.m文件: // .h @interface NSObj
在 ARC 环境中遇到一些小问题。创建一个将 View 添加到父 View 的 NSObject - 它基本上是一个可以处理一些文本并显示它的“弹出类”。 在 View Controller 中它被实
我是一名优秀的程序员,十分优秀!