类型String的值在Swift中键入[String]

时间:2015-08-01 14:00:22

标签: swift

也许有人可以帮助我。我从IOSCcreator中复制了“向TableView添加行”项目。现在我更改了可以使用选择器视图添加项目的文件。在第44行(pickOption = carName.text),它失败了:

  

无法将String类型的值赋值为[String]类型的值。

尝试很多事情,但没有任何作用。

import UIKit

class CarDetailViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

  @IBOutlet weak var carName: UITextField!
  var pickOption = ["Opel", "Mercedes", "Hyundai", "Kia"]

    override func viewDidLoad() {
        super.viewDidLoad()

        var pickerView = UIPickerView()
        pickerView.delegate = self
        carName.inputView = pickerView
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickOption.count
    }
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return pickOption[row]
    }
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        carName.text = pickOption[row]
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "doneSegue" {
           pickOption = carName.text
        }
    }
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        self.view.endEditing(true)
    }
}

6 个答案:

答案 0 :(得分:2)

由于pickOption是一个数组而carName文本是一个字符串,因此您有两个选择:

  • carName添加到数组中,在这种情况下,您执行pickOption.append(carName.text)
  • 将旧列表替换为单个项目,在这种情况下,您执行pickOption = [carName.text]

答案 1 :(得分:1)

下面:

pickOption = carName.text

您正在为pickOption分配一个字符串。

(这个答案基本上就是编译器告诉你的,但不知道还能说些什么)。

答案 2 :(得分:1)

你想做什么?如果您尝试使列表中只包含所选项目,那么您将需要使pickOption成为一个只包含该字符串的数组:

pickOption = [carName.text]

如果您只是想保存已挑选的数据,那么您应该完全使用不同的实例变量。这样做的原因是,如果您的选择器在用户选择之后重新加载,那么选择器将仅显示单个值(用户刚刚选择)而不是所有值,因为您设置了为选择器提供数据的数组只有选定的值。由于您在加载时硬编码了不同的汽车选项,因此您无法再次获取不同的选项并且只是丢失了数据。

答案 3 :(得分:0)

试试这个:

pickOption = String(carName.text)

答案 4 :(得分:0)

这是一个简单的修复。如果您尝试启动数组而将一个值(carName.text)存储在其中,请执行以下操作:pickOption = [carName.text]如果您&#39;重新尝试将carName.text添加到数组中,执行以下操作:pickOption.append("\(carName.text)&#34;。祝你的项目好运!

答案 5 :(得分:0)

谢谢大家。 pickOption.append(carName.text)帮了忙。要在此处填写文本所在的文件。

导入UIKit

类CarListViewController:UITableViewController {

var cars = String   var newCar:String =&#34;&#34;

@IBAction func cancel(segue:UIStoryboardSegue){

}

@IBAction func done(segue:UIStoryboardSegue){

public class ListUsersActivity extends Activity {

    private String mCurrentUserId;
    private ArrayAdapter<String> mNamesArrayAdapter;
    private ArrayList<String> mNames;
    private ListView mUsersListView;
    private Button mLogoutButton;
    private ProgressDialog mProgressDialog;
    private BroadcastReceiver mReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_users);

        mCurrentUserId = ParseUser.getCurrentUser().getObjectId();
        mNames = new ArrayList<String>();

        ParseQuery<ParseUser> query = ParseUser.getQuery();
        // Don't include yourself!
        query.whereNotEqualTo("objectId", mCurrentUserId);
        query.findInBackground(new FindCallback<ParseUser>() {

            @Override
            public void done(List<ParseUser> userList, ParseException e) {
                if (e == null) {
                    for (int i = 0; i < userList.size(); i++) {
                        mNames.add(userList.get(i).getUsername().toString());
                    }
                    mUsersListView = (ListView) findViewById(R.id.usersListView);
                    mNamesArrayAdapter = new ArrayAdapter<String>(
                            getApplicationContext(), R.layout.user_list_item,
                            mNames);
                    mUsersListView.setAdapter(mNamesArrayAdapter);
                    mUsersListView
                            .setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                @Override
                                public void onItemClick(AdapterView<?> a,
                                        View v, int i, long l) {
                                    openConversation(mNames, i);

                                }

                                private void openConversation(
                                        ArrayList<String> mNames, int pos) {
                                    ParseQuery<ParseUser> query = ParseUser
                                            .getQuery();
                                    query.whereEqualTo("username",
                                            mNames.get(pos));
                                    query.findInBackground(new FindCallback<ParseUser>() {

                                        @Override
                                        public void done(List<ParseUser> user,
                                                ParseException e) {
                                            if (e == null) {
                                                Intent intent = new Intent(ListUsersActivity.this, MessagingActivity.class);
                                                intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId());
                                                startActivity(intent);
                                            } else {
                                                Toast.makeText(
                                                        getApplicationContext(),
                                                        "Error finding that user!",
                                                        Toast.LENGTH_LONG)
                                                        .show();
                                            }

                                        }
                                    });

                                }
                            });

                } else {
                    Toast.makeText(ListUsersActivity.this,
                            "Error loading user list", Toast.LENGTH_LONG)
                            .show();
                }

            }
        });



        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setTitle("Loading");
        mProgressDialog.setMessage("Please Wait...");
        mProgressDialog.show();

        // broadcast receiver to listen for the broadcast
        // from MessageService

        mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Boolean success = intent.getBooleanExtra("success", false);
                Toast.makeText(ListUsersActivity.this, "Sinch has started and is working!", Toast.LENGTH_LONG).show();
                mProgressDialog.dismiss();

                // Show a toast message is the Sinch service failed to start
                if (!success) {
                    Toast.makeText(ListUsersActivity.this,
                            "Messaging service failed to start",
                            Toast.LENGTH_LONG).show();
                }

            }

        };

        LocalBroadcastManager
                .getInstance(this)
                .registerReceiver(
                        mReceiver,
                        new IntentFilter(
                                "com.jordanpeterson.textly.messages.ListUsersActivity"));

    }

}

覆盖func numberOfSectionsInTableView(tableView:UITableView) - &gt; Int {         返回1     }

var carDetailVC = segue.sourceViewController as! CarDetailViewController
newCar = carDetailVC.carName.text
cars.append(newCar)
self.tableView.reloadData()

}

override func viewDidLoad() {
    super.viewDidLoad()

    cars = ["BMW","Audi","Volkswagen"]
}

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

}