gpt4 book ai didi

ios - Swift:检查数据类型是否可以转换为 Double

转载 作者:行者123 更新时间:2023-11-28 11:10:55 26 4
gpt4 key购买 nike

我想检查从 MySQL 数据库 接收到的数据是否可以转换为 Double,如果可能的话,我想将它附加到一个数组。

来自另一个question我得到以下代码:

extension String {
struct NumberFormatter {
static let instance = NSNumberFormatter()
}
var doubleValue:Double? {
return NumberFormatter.instance.numberFromString(self)?.doubleValue
}
var integerValue:Int? {
return NumberFormatter.instance.numberFromString(self)?.integerValue
}
}

这是我关心的代码(在for-loop中):

if let value = datas[i].puls.doubleValue {
pulsWerte.append(value)
print(datas[i].puls)
}else {
badIndex.append(i)
continue
}

如果我的数据库的条目是NULL,我的程序应该在else-分支中继续。但是,如果我测试这种情况,我最终会遇到运行时错误和以下两条消息:

-[NSNull length]: unrecognized selector sent to instance 0x1451238

&

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1451238'

有谁知道我的错误吗?

更新

这就是我的数据数组的创建方式:
我使用 Objectiv-C 下载和分配数据。
在我的 Data.h 文件中,我创建了我的 Data 类。

@interface Data : NSObject

@property (nonatomic, strong) NSString *sozialversicherungsnummer;
@property (nonatomic, strong) NSString *messzeitpunkt;
@property (nonatomic, strong) NSString *puls;
@property (nonatomic, strong) NSString *sauerstoffgehalt;

@end

在我的 HomeModel.m 中,我创建了一个名为“_data”的 NSMutableArray。下载完成后,该数组将按如下方式填充:

for (int i = 0; i < jsonArray.count; i++)
{
NSDictionary *jsonElement = jsonArray[i];

// Create a new data object and set its props to JsonElement properties
Data *newData = [[Data alloc] init];
newData.sozialversicherungsnummer = jsonElement[@"Sozialversicherungsnummer"];
newData.messzeitpunkt = jsonElement[@"Messzeitpunkt"];
newData.puls = jsonElement[@"Puls"];
newData.sauerstoffgehalt = jsonElement[@"Sauerstoffgehalt"];

// Add this question to the locations array
[_data addObject:newData];

}

完成此步骤后,我通过名为 "itemsDownloaded"的函数在名为 "items" 的参数名称下获取此 "_data"-array .
现在我在我的 Swift 文件中调用这个函数,在这里我可以将下载的 “items”typecast 为“Data”(我自己创建的类)。

func itemsDownloaded(items: [AnyObject]!) {
let datas = items as! [Data]
.
.
.

最佳答案

首先你可以定义如下协议(protocol)。

双敞篷车

protocol DoubleConvertible {
func toDouble() -> Double?
}

使 String、Int 和 Double 符合 DoubleConvertible

接下来,对于要转换为 Double 的每种类型,您需要使该类型符合 DoubleConvertible

让我们为 String 做这件事

extension String: DoubleConvertible {
func toDouble() -> Double? {
return Double(self)
}
}

Int

extension Int: DoubleConvertible {
func toDouble() -> Double? {
return Double(self)
}
}

并且...很好Double

extension Double: DoubleConvertible {
func toDouble() -> Double? {
return self
}
}

从[Any]到[Double]

现在给定几个不同类型的值列表

let list: [Any?] = ["123", nil, "Hello", 456, true, 789.1]

我们可以轻松地将其转换为 Double 的列表。

let listOfDouble = list
.flatMap { $0 as? DoubleConvertible }
.flatMap { $0.toDouble() }

listOfDouble // [123.0, 456.0, 789.1]

关于ios - Swift:检查数据类型是否可以转换为 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com