如何使用 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.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.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 添加服务器时,只需将新的字典值推送到您的字典中即可
我拥有一个 vpn 应用程序。我们的应用程序预定义了一台服务器,该服务器已硬编码到应用程序中。看起来像这样; let serverAddress = "0.0.0.0"
(但使用真实服务器 ip)。
我使用以下方法制作了一个选择器视图:
let 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.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 添加服务器时,只需将新的字典值推送到您的字典中即可