全ての変数定義に型を明示しても
メソッドチェーンや引数に直接ラムダを記述しているなら型推論は発生している

1ステートメント内に暗黙の型有り
let a:Int = b( c() ) { d:Int in e(d) }.f().g()

極端だけどここまでしないと型推論は多少なりとも発生する
let lm:(Int)->Int = { (d:Int) in e(d) }
let retC:Int = c()
let retB:B = b(retC, lm)
let retF:F = retB.f()
let a:Int = retF.g()

実際にはそのビルドの20分とやらの大半は
一部のボトルネックになってるコードのせいという可能性も高いし
闇雲にステートメントを細分化する必要は無いけど