的int值中我有自定義對象A
的財產數組ZZ
:斯威夫特減少 - 添加字符串
String a1
我想補充的所有元素的a1
屬性數組中,並返回一個NSNumber值。由於值a1是一個字符串,我也必須在旅途中將它轉換爲雙精度值。
我試圖做的東西線:
ZZ?.reduce(0, {$0.Int(a1) + $1.Int(a1)})
,但得到很多關於語法錯誤的。
我該怎麼辦?
的int值中我有自定義對象A
的財產數組ZZ
:斯威夫特減少 - 添加字符串
String a1
我想補充的所有元素的a1
屬性數組中,並返回一個NSNumber值。由於值a1是一個字符串,我也必須在旅途中將它轉換爲雙精度值。
我試圖做的東西線:
ZZ?.reduce(0, {$0.Int(a1) + $1.Int(a1)})
,但得到很多關於語法錯誤的。
我該怎麼辦?
它應該是這樣的。
如果字符串包含Double
值:
let result = zz.reduce(0) { $0 + Double($1.a1) ?? 0.0 }
如果字符串包含Int
值:
let result = zz.reduce(0) { $0 + Int($1.a1) ?? 0 }
假設非可轉換字符串到雙指0.0值...
public class Custom
{
public var theProperty: String
public init(value: String)
{
self.theProperty = value
}
}
let c1: Custom = Custom(value: "1.1")
let c2: Custom = Custom(value: "a")
let c3: Custom = Custom(value: "3.2")
let array: [Custom] = [ c1, c2, c3 ]
let result: Double = array.map({
guard let theProperty = Double($0.theProperty) else
{
return 0.0
}
return theProperty
})
.reduce(0.0) { $0 + $1 }
print(result)
作爲直接使用reduce
的替代方法在zz
陣列上,可以一個flatMap
呼叫上zz
,此後在應用reduce
總結其被成功初始化爲Double
實例元素內施加的zz
每個元件的a1
構件的嘗試Double
初始化(由failable init?(_:String)
initializer of Double
)。
struct Custom {
let a1: String
init(_ a1: String) { self.a1 = a1 }
}
let zz: [Custom] = [Custom("1.4"), Custom("z"), Custom("3.1")]
let sumOfValids = zz.lazy.flatMap{ Double($0.a1) }.reduce(0, +) // 4.5
對於最後一部分(如果你真的想這樣)
「我想補充的所有元素的A1屬性陣列 並返回
NSNumber
值」。
您可以簡單地使用appropriate NSNumber
by Double
initializer。
最後請注意,以上都不是執行的嘗試鑄造從String
到Double
,而是由String
值企圖Double
的初始化,通過String
初始化在LosslessStringConvertible
blueprinted,利用該failable的哪個Double
符合。
「因爲值
a1
是String
,我還必須將它轉換成一個Double
在旅途太」。