2015-08-26 26 views
8

Vì một số lý do trong khi triển khai thực hiện một đối tượng hashValue để sử dụng trong các cấu trúc khác mà chương trình bị treo. Nó dường như sụp đổ khi tôi cố gắng để có được hashCode của bất kỳ đối tượng chuỗi. Nó đang mở rộng một cấu trúc nhưng theo thời gian hashValue được sử dụng trường được truy cập đã được xác định. Tôi kéo dài điều này bằng cách kiểm tra một chuỗi như "TEST" và nó vẫn treo. HashValues ​​số nguyên như trường id là tốt. Bất kỳ trợ giúp sẽ được đánh giá cao.Swift hashValue treo ứng dụng

Swift 1.2 Xcode 6,4

extension SwiftObject:Hashable{//Hashable inherits Equatable and used for sets 
    var hashValue: Int { 
     let prime:Int = 31; 
     var result:Int = 17; 
     result = prime * result + id.hashValue 
     result = prime * result + name.hashValue 
     var locationString:String = "\(location.latitude.hashValue), \(location.longitude.hashValue)" 
     result = prime * result + locationString.hashValue 
     return result 
    } 
} 

func == (lhs: Object, rhs: Object) -> Bool { 
    let primaryBool:Bool = lhs.id == rhs.id 
    let secondaryBool:Bool = lhs.name == rhs.name 
    let thirdBool:Bool = lhs.location.distance(rhs.location) == 0 
    return primaryBool || (secondaryBool && thirdBool) 
} 

StackTrace:

* thread #1: tid = 0x6c2b4, 0x000000010f021af3 IphoneApplication`IphoneApplication.AppStruct.hashValue.getter : Swift.Int(self=IphoneApplication.AppStruct at 0x00007fff50befde8) + 2771 at IphoneApplication.swift:96, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 
    * frame #0: 0x000000010f021af3 IphoneApplication`IphoneApplication.AppStruct.hashValue.getter : Swift.Int(self=IphoneApplication.AppStruct at 0x00007fff50befde8) + 2771 at IphoneApplication.swift:96 
    frame #1: 0x000000010f02302b IphoneApplication`protocol witness for Swift.Hashable.hashValue.getter : Swift.Int in conformance IphoneApplication.AppStruct : Swift.Hashable in IphoneApplication + 651 at IphoneApplication.swift:88 
    frame #2: 0x0000000111fc1aad libswiftCore.dylib`Swift._NativeSetStorage._bucket <A : Swift.Hashable>(Swift._NativeSetStorage<A>)(A) -> Swift.Int + 29 
    frame #3: 0x0000000111fd071e libswiftCore.dylib`Swift._VariantSetStorage.nativeUpdateValue <A : Swift.Hashable>(inout Swift._VariantSetStorage<A>)(A, forKey : A) -> Swift.Optional<A> + 334 
    frame #4: 0x0000000111fbb344 libswiftCore.dylib`Swift._VariantSetStorage.updateValue <A : Swift.Hashable>(inout Swift._VariantSetStorage<A>)(A, forKey : A) -> Swift.Optional<A> + 52 
    frame #5: 0x0000000111fbb2c0 libswiftCore.dylib`Swift.Set.insert <A : Swift.Hashable>(inout Swift.Set<A>)(A) ->() + 144 
    frame #6: 0x000000010f032592 IphoneApplication`IphoneApplication.FoursquarePlacesService.(result=0x00007fcfc87700d0, self=0x00007fcfca825c90) -> (IphoneApplication.WOMapUI, searchTerm : Swift.String) -> Swift.Set<IphoneApplication.AppStruct>).(closure #1) + 8162 at FoursquarePlacesService.swift:102 
    frame #7: 0x000000010f032917 IphoneApplication`reabstraction thunk helper from @callee_owned (@owned QuadratTouch.Result) -> (@unowned()) to @callee_owned (@in (result : QuadratTouch.Result)) -> (@out()) + 23 at FoursquarePlacesService.swift:0 
    frame #8: 0x000000010f02d171 IphoneApplication`partial apply forwarder for reabstraction thunk helper from @callee_owned (@owned QuadratTouch.Result) -> (@unowned()) to @callee_owned (@in (result : QuadratTouch.Result)) -> (@out()) + 81 at FoursquarePlacesService.swift:0 
    frame #9: 0x0000000111e19150 QuadratTouch`reabstraction thunk helper from @callee_owned (@in (result : QuadratTouch.Result)) -> (@out()) to @callee_owned (@owned QuadratTouch.Result) -> (@unowned()) + 32 at Task.swift:0 
    frame #10: 0x0000000111e190f8 QuadratTouch`QuadratTouch.DataTask.(self=0x00007fcfcd004100, result=0x00007fcfc87700d0) ->() ->()).(closure #1).(closure #1) + 232 at Task.swift:71 
    frame #11: 0x0000000111e19187 QuadratTouch`reabstraction thunk helper from @callee_owned() -> (@unowned()) to @callee_unowned @objc_block() -> (@unowned()) + 39 at Task.swift:0 
    frame #12: 0x00000001100a757f Foundation`__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7 
    frame #13: 0x000000010ffe80b2 Foundation`-[NSBlockOperation main] + 98 
    frame #14: 0x000000010ffca774 Foundation`-[__NSOperationInternal _start:] + 645 
    frame #15: 0x000000010ffca383 Foundation`__NSOQSchedule_f + 184 
    frame #16: 0x0000000112e60614 libdispatch.dylib`_dispatch_client_callout + 8 
    frame #17: 0x0000000112e48a1c libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1664 
    frame #18: 0x000000010f8841f9 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    frame #19: 0x000000010f845dcb CoreFoundation`__CFRunLoopRun + 2043 
    frame #20: 0x000000010f845366 CoreFoundation`CFRunLoopRunSpecific + 470 
    frame #21: 0x0000000113d02a3e GraphicsServices`GSEventRunModal + 161 
    frame #22: 0x00000001109288c0 UIKit`UIApplicationMain + 1282 
    frame #23: 0x000000010f027727 IphoneApplication`main + 135 at AppDelegate.swift:13 
    frame #24: 0x0000000112e94145 libdyld.dylib`start + 1 
+0

Bạn có thể đăng theo dõi ngăn xếp không? – fumoboy007

+0

Ngoài ra, bạn không cần phải chỉ định các loại khi xác định các biến đó vì Swift sẽ suy ra loại từ giá trị bạn đang gán cho biến. – fumoboy007

+0

Tôi bắt đầu tin rằng đó là một vấn đề với số nguyên tràn – kdgwill

Trả lời

11

Yup, điều này có vẻ như tràn số nguyên. Bạn có thể thử sử dụng các phiên bản tràn của toán tử nhân và phép cộng: &*&+.

Đọc thêm: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html#//apple_ref/doc/uid/TP40014097-CH27-ID37

+1

Điều này chính xác cố định vấn đề cảm ơn bạn, để sửa chữa và liên kết – kdgwill

+0

@ kdgwill Niềm vui của tôi! – fumoboy007

Các vấn đề liên quan