如何使用 Swift 使用 UIPickerView select ip?

How do I select ip using UIPickerView using Swift?

我拥有一个 vpn 应用程序。我们的应用程序预定义了一台服务器,该服务器已硬编码到应用程序中。看起来像这样; let serverAddress = "0.0.0.0"(但使用真实服务器 ip)。

我使用以下方法制作了一个选择器视图:

let 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" 用所选 ip 替换 0.0.0.0

总结: 我只指定了 1 个服务器,如果我想更改它,我会更改 let serverAddress = "0.0.0.0",但我想添加更多服务器作为选项。所以我不知何故需要改变 0.0.0.0

我个人认为选择器视图是最好的方式。但我乐于接受想法。

我正在使用的源代码在这里:https://github.com/lxdcn/NEPacketTunnelVPNDemo

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

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

为此,我建议使用字典将所有服务器存储到 select,如下所示:

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 添加服务器时,只需将新的字典值推送到您的字典中即可