我的类型习惯应该如何迅速改变?

时间:2016-06-02 23:13:49

标签: swift

我通过转换一些旧的Obj-C库来快速入门。老实说,这很痛苦,我想知道我的习惯是不是很糟糕,或者是因为我读过的所有内容都谈到了迅速采取行动是多么容易。具体做法是:

  • 没有隐式类型转换会使代码混乱,并且使得for循环计数器的乘法变得不那么方便。有没有更好的方法来解决这个问题?
  • 数组使用也有点冗长。有没有更短的方法可以使用Arrays作为参数,或者声明一个如下所示的空数组?
  • 与允许的结构Obj-C相比,命名函数通常看起来更难。大多数开发人员是否需要具有多个参数的函数中第一个参数的外部参数名称?

    func colorsAlongArray(colorArr:Array<UIColor>, steps:Int) -> Array<UIColor>
    {
        let arrCount = colorArr.count
        let stepIncrement = Double(arrCount)/Double(steps)
        var returnArr : Array<UIColor> = []
    
        for i in 0..<steps
        {
            let stepVal = stepIncrement*Double(i)
            let stepFactor = CGFloat(fmod(stepVal, 1.0))
            let stepIndex1 = Int(floor(stepVal/1.0))
            var stepIndex2 = Int(ceil(stepVal/1.0))
    
            if(stepIndex2 > arrCount-1)
                {stepIndex2 = arrCount-1}
            let color1 = colorArr[stepIndex1]
            let color2 = colorArr[stepIndex2]
    
            let color = colorByInterpolatingColors(color1, color2: color2, factor: stepFactor)
            returnArr += [color]
        }
    
        return returnArr
    }
    

2 个答案:

答案 0 :(得分:2)

关于你提出的三个问题。

  • 没有隐式类型转换是语言约定,旨在使代码安全。这是设计的,有点冗长。您可以在Numeric Type ConversionThe Basics章节的The Swift Programming Language部分中了解相关信息。默认情况下,您也不会在算术运算中进行翻转。

  • Swift是强类型的,所以如果你没有一个初始值放入数组,那么Type Inference系统可以自动确定类型(如var returnArr = [UIColor.blackColor()]) ,您必须以某种方式指定类型。但是,您可以使用类型推断和Array Type Shorthand Syntax来略微缩短数组声明(var returnArr = [UIColor]())。

  • Swift的命名准则与Objective-C的命名准则不同。事实上,它们更为简短。我建议您查看它们:https://swift.org/documentation/api-design-guidelines/

答案 1 :(得分:1)

您可以像这样创建UIColor数组(无论哪种方式):

var returnArr = [UIColor]()
var returnArr: [UIColor] = []

我认为你可以在for循环中做这样的事情:

for i in 0..<steps as! [Double] {

}