在Swift中从字符串(在UITextView中输入)解析多个双精度并将其放入双精度数组的最简单/最干净的方法是什么?
比方说,用户输入“ 23.4 45 16.997 -32”。当他进入时,我要
doubleArray[0] = 2
doubleArray[0] = 23
doubleArray[0] = 23.
doubleArray[0] = 23.4
doubleArray[1] = 4
doubleArray[1] = 45
等
我有
var dataArray = [""]
dataArray = inputString.components(separatedBy: " ")
可以很好地将数据分成字符串数组,然后可以将每个字符串转换为Doubles。但是,有没有一种更简洁的方法?
还有,有没有一种方法可以轻松地实时实时验证进入UITextView的数据?例如,不允许在条目中使用多个小数点或负号,禁止使用字母等?
现在我正在使用
let decimalPoint = NSLocale.current.decimalSeparator! as String
let validChars : Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-", decimalSeparator[0], " "]
和
validChar = Set(inputString).isSubset(of: validChars)
If !validChar {
inputString.deleteBackward()
//display Error Message
}
当然,这还需要确保没有小数点或负号...等。所有简单的步骤,但是没有更简单的方法吗? (这也大大简化了-我实际上有特定的错误消息,例如“仅允许使用一个小数点分隔符”,“无效字符”等)。
(在其他情况下,我也玩过NSNumber,但不确定如何/是否可以在这里使用它。)
我觉得我想重新发明轮子...
答案 0 :(得分:2)
结合利奥和马丁的答案:
let arrayOfDoubles = "This costs US$ 7.99"
.components(separatedBy:.whitespacesAndNewlines)
.compactMap{Double($0)}
应该工作并处理多种空白,例如空格,不间断空格,制表符和换行符。
根据Martin R,它将不会处理语言环境的不同数字格式。
您可以将NumberFormatter添加到混合中:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "de")
let arrayOfDoubles = "7 3,4 12,2 9 2,3"
.components(separatedBy:.whitespacesAndNewlines)
.compactMap{ formatter.number(from: $0).map { $0.doubleValue } }
print(arrayOfDoubles)
(上面的示例用于处理德语格式的数字,并带有逗号十进制分隔符。)
但是,如果您正在处理用于发送/接收到服务器的固定编号格式,则可能没有关系。
答案 1 :(得分:1)
您可以继承modelP2.PlotAreaBorderColor = OxyColors.Transparent;
并重写<asp:Repeater ID="rptArtigos" runat="server">
<HeaderTemplate>
<table id="tblArtigos" class="table table-bordered dataTable">
<thead class="thead-dark">
<tr>
<th style="width: 20px;">ID</th>
<th style="width: 120px">Ref. Cliente</th>
<th style="width: 100px">Ref. Interna</th>
<th style="width: 100px">Nome</th>
<th style="width: 100px">Logística</th>
<th style="width: 100px">Estado</th>
<th style="width: 10px;">Editar</th>
<th style="width: 10px;">Validar</th>
<th style="width: 10px;">Rejeitar</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tbody>
<tr>
<td>1</td>
<td>REF12345</td>
<td>123456</td>
<td>User</td>
<td>Não Validado</td>
<td>Criado</td>
<td class="text-center">
<asp:ImageButton ImageUrl="/Images/Buttons/edit.png" CssClass="" Width="25" runat="server" />
</td>
<td class="text-center">
<asp:ImageButton ImageUrl="/Images/Buttons/success.png" CssClass="" Width="25" runat="server" />
</td>
<td class="text-center">
<asp:ImageButton ImageUrl="/Images/Buttons/x-button.png" CssClass="" Width="25" runat="server" />
</td>
</tr>
</tbody>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
方法,如下所示:
UITextView
textViewDidChange