2014-10-13 5 views
6

के लिए प्लेग्राउंड क्रैश इस कोड के लिए एक्सकोड प्लेग्राउंड क्रैश - यदि प्रोजेक्ट में यह संकलन को रोकता है।रिकर्सिव वैल्यू टाइप

मैं सिर्फ एक बहुत ही सरल struct घोषित करने के लिए कोशिश कर रहा हूँ:

struct Node<T> { 
    let value: T 
    var next: Node<T>? 

    init(_ value: T) { 
     self.value = value 
     next = nil 
    } 
} 

तो मुझे लगता है कि खेल के मैदान में XCode मैं त्रुटि संदेश निम्न हो कार्य करें: खेल का मैदान सेवा के साथ संचार में अप्रत्याशित रूप से बाधित किया गया।

यदि मैं इस संरचना को एक्सकोड में अलग फ़ाइल में घोषित करता हूं तो परियोजना को संकलित नहीं किया जा सकता है। मुझे लगता है कि इस मामले में कमांड सिग्नल के कारण विफल रहा: सेगमेंटेशन गलती: 11

क्या कोई मेरी मदद कर सकता है? क्या आसपास कोई काम है? किसी भी मदद की बहुत सराहना की।

+1

एक खेल का मैदान Xcode 6.1 (6A1046a) में मैं मिलता है: 'रिकर्सिव मान प्रकार 'नोड ' allowed' नहीं है। ऐसा लगता है कि यदि आप 'struct' के बजाय 'वर्ग' का उपयोग करते हैं तो यह काम करता है। –

+1

जोड़ें कि आप अपने प्रश्न के लिए किस एक्सकोड का उपयोग कर रहे हैं। –

+1

@ ब्लैक मेंढक एक्सकोड 6.0 (6 ए 313)। ऐसा लगता है कि मुझे वास्तव में – drasto

उत्तर

2

त्वरित दस्तावेज़ीकरण को उद्धृत करते हुए, "आपके कोड में चारों ओर पारित होने पर संरचनाओं की हमेशा प्रतिलिपि बनाई जाती है, और संदर्भ गणना का उपयोग नहीं करते हैं।" [1]

एक लिंक की गई सूची जिसे आप वर्तमान नोड पर अगले नोड के सूचक या संदर्भ को संग्रहीत करके कार्यों को प्राप्त करने का प्रयास कर रहे हैं। इस तरह, प्रत्येक नोड का आकार समान होता है। दूसरी ओर स्विफ्ट की संरचना संदर्भ प्रकार नहीं हैं। प्रत्येक नोड का आकार अलग-अलग स्टोर करने के लिए कितने नोड्स को स्टोर करना है, इस पर निर्भर करेगा।

जो आप संरचना के साथ करने की कोशिश कर रहे हैं उसे प्राप्त करने का एक तरीका UnsafeMutablePointer का उपयोग कर रहा है। मुझे आपको चेतावनी देने की आवश्यकता नहीं है क्योंकि इसे तेजी से करने से आप हर कुछ पंक्तियों को "असुरक्षित" लिखते हैं।

struct Node<T> { 
    var x: T 
    // Setting pointer type to <Node<T>> compiles, but infinite loops on runtime (Swift 1.2) 
    var next: UnsafeMutablePointer<Void> 
} 

var second = Node(x: 2, next: nil) 
var first = Node(x: 1, next: &second) 

print(unsafeBitCast(first.next, UnsafeMutablePointer<Node<Int>>.self).memory.x) // Prints 2 

[1] https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

संबंधित मुद्दे