2015-03-08 4 views
5

में कई घटकों के साथ UIPickerView का उपयोग करना हाय वहाँ मैं उम्र के लिए काम करने की कोशिश कर रहा हूं, बिना किसी सफलता के, इसलिए यह आपके लिए आसान लगता है।स्विफ्ट

मैं एक 3 पहिया यूआईपीकर व्यू का उपयोग करना चाहता हूं - पहला पहिया किया गया चयन करें मूल्य का उपयोग शेष दो पहियों के लिए सरणी को बदलने के लिए किया जाएगा, लेकिन वे एक रूपांतरण ऐप के समान होंगे।

ऐसा लगता है कि पहियों को populating जब यह किसी भी त्रुटि स्ट्रिंग के समान नहीं है। मैं कुछ भी गलत नहीं देख सकता लेकिन मुझे पता है कि यह कुछ बुनियादी है जिसे मैंने याद किया है।

किसी भी पॉइंटर्स की बहुत सराहना की जाएगी।

मोटी।

var wheelContents:[[String]] = [] 

आप स्पष्ट रूप से wheelContents एक प्रकार देना नहीं है, स्विफ्ट infers यह NSArray है जो होने के लिए:

// ViewController.swift 
// picker test 

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate { 

    @IBOutlet weak var picker1Label: UILabel! 
    @IBOutlet weak var picker2Label: UILabel! 

    @IBOutlet weak var bigPicker: UIPickerView! 

    var wheelContents = [] 
    var length = ["metres","feet","yards","inches","mm","cm","miles"] 
    var volume = ["m3","US Gall","Imp Gall","Barrels", "cubic FT","litres"] 
    var conType = ["length","volume"] 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     wheelContents = [conType,length,length] 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    //For main selection of type of conversion 
    // returns the number of 'columns' to display. 
    func numberOfComponentsInPickerView(bigPicker: UIPickerView) -> Int{ 

     return wheelContents.count 

    } 

    // returns the # of rows in each component.. 
    func pickerView(bigPicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 

     return wheelContents[component].count 


    } 

    func pickerView(bigPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{ 

     return wheelContents[component][row] 

    } 
} 

उत्तर

1

आप स्विफ्ट कि आपके wheelContents सरणी String की सरणी की एक सरणी है बताने की आवश्यकता आपको क्या समस्याएं दे रही हैं।

1

आप तेजी से कहने की जरूरत है, जो आपके wheelContents स्ट्रिंग सरणियों की एक सरणी है:

var wheelContents:[[String]] = [] 

इसके अलावा, आप क्योंकि आप अपने वर्ग में प्रतिनिधि संभाल self करने के लिए अपने pickerView के प्रतिनिधि स्थापित करना चाहिए। अन्यथा कार्यों ठीक से काम नहीं करेगा:

//In the viewDidLoad method 
bigPicker.delegate = self 
+0

धन्यवाद बहुत बहुत viewDidLoad में प्रतिनिधि के साथ pickerView के डेटा स्रोत निर्धारित करने की आवश्यकता –

1

चूंकि आप इस wheelContents = [] तरह wheelContents की घोषणा की, उसके तत्वों प्रकार निर्दिष्ट किए बिना, संकलक स्वचालित रूप से लाने का प्रयास है कि यह AnyObjects उर्फ ​​[AnyObject] की सरणी है।

कारण है कि जब आप wheelContents[component].count लौट रहे हैं यह एक त्रुटि उत्पन्न करता है कि: उस पल में संकलक एक String! उम्मीद कर रही है लेकिन आप एक AnyObject प्रदान कर रहे हैं।

यह वास्तव में एक आसान फिक्स है, आपको बस यह निर्दिष्ट करना चाहिए कि जब आप इसे घोषित करते हैं तो सरणी की सामग्री क्या होगी। (यह तार के सरणियों की एक सरणी उर्फ ​​[[String]] है)