Ios 如何使用UIPickerView和Swift选择ip?

Ios 如何使用UIPickerView和Swift选择ip?,ios,swift,xcode,uipickerview,Ios,Swift,Xcode,Uipickerview,我拥有一个vpn应用程序。我们的应用程序预定义了一个服务器,该服务器硬编码到应用程序中。看起来是这样的,让serverAddress=“0.0.0.0”(但使用真正的服务器ip) 我使用以下内容创建了一个选择器视图: 让IPs=[“GER1”、“UK1”、“GER2”、“UK2”] 我现在想知道怎么说“GER1=192.168.1.2UK1=192.168.1.3GER2=192.168.1.4UK2=192.168.1.5” 然后将其解析为let serverAddress=“0.0.0.0”

我拥有一个vpn应用程序。我们的应用程序预定义了一个服务器,该服务器硬编码到应用程序中。看起来是这样的,
让serverAddress=“0.0.0.0”
(但使用真正的服务器ip)

我使用以下内容创建了一个选择器视图:

让IPs=[“GER1”、“UK1”、“GER2”、“UK2”]

我现在想知道怎么说“
GER1=192.168.1.2
UK1=192.168.1.3
GER2=192.168.1.4
UK2=192.168.1.5

然后将其解析为
let serverAddress=“0.0.0.0”
用所选ip替换
0.0.0

总之: 我只指定了一台服务器,如果我想更改它,我会更改
让serverAddress=“0.0.0.0”
,但我想添加更多服务器作为一个选项。所以我需要改变
0.0.0.0

我个人认为picker view是最好的方式。但我对想法持开放态度


我正在使用的源代码如下:

首先,您应该将
serverAddress
更改为
var
,而不是
let

然后,您应该使用委托函数:
didSelectRow
,将
serverAddress
更改为所选的服务器地址

为了实现这一点,我建议使用字典存储所有要从中选择的服务器,如下所示:

class YourViewController {
    // MARK: - Server Address

    var serverAddress = "0.0.0.0"

    // MARK: Picker View Resources

    let serverPicker = UIPickerView() {
        didSet {
            serverPicker.delegate = self
            serverPicker.dataSource = self
        }
    }
    var serverPickerData:[(key: String, value: String)] = [("base", "0.0.0.0"), ("ger1", "192.68.1.2"), ("uk1", "192.68.1.3"), ("ger2", "192.68.1.4"), ("uk2", "192.68.1.5")]


    .... 

}


extension YourViewController: UIPickerViewDelegate, UIPickerViewDataSource {

    // MARK: - UIPicker View Delegate

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return serverPickerData.count
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        serverAddress = serverPickerData[row].value
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return "\(serverPickerData[row].key) - \(serverPickerData[row].value)"
    }

}

然后,每当您需要向UIPicker添加服务器时,只需将新的字典值推送到字典上即可

谢谢!我在家时会试试这个,希望它能奏效:)@Benftw先生如果对你有效,如果你接受这个答案,我将不胜感激!好luckHi,我不知道我把这个放在哪里了,我已经把整个
viewcontroller.swift
文件上传到了粘贴箱,如果可以的话。请复制、添加代码并上传回:)谢谢!(我确实试过自己做,但出现了一系列错误)粘贴箱:我已经更新了我的答案,以反映代码应该放在哪里。(我还添加了
picker.dataSource=self
行)。我猜您所收到的错误是因为行
picker.dataSource=self
picker.delegate=self
无效,因为您的viewController没有扩展UIPickerViewDeleteGate和UIPickerViewData协议,这意味着,当您将选择器协议分配给
self
时,编译器无法识别ViewController是否具有这些协议函数。错误:使用未声明的类型“ServerPickerData”另一个错误“let”声明无法观察属性。最后一个错误:方法“pickerView(pickerView:numberOfRowsInComponent:)”的参数标签与协议“UIPickerViewDataSource”所需的参数标签不同(“pickerView(OfRowsInComponent:)”)