小编vac*_*ama的帖子

为什么标签的默认类型是强制解包的可选项?

当我在视图中创建标签(从Object库中拖动)并使IBOutlet连接标签viewController(Ctrl和拖动)时,Xcode生成的默认代码是,例如,@IBOutlet weak var displayColumn: UILabel!

我可以删除感叹号并将其设置为UILable唯一.但是必须有一个很好的理由Xcode希望它是一个强制解包的可选类型.

问题:我认为我不明白在这里使用可选类型的原因.因为我已经在我的视图中创建了一个标签并将其连接到我的控制器,所以它确实存在,它存在,我创建它.为什么Xcode想要一个选项作为默认类型?如果它说标签内的文字是一个选项,那对我来说听起来很合理,因为标签在运行时的某个时刻可能是空的.

非常感谢

xcode optional uilabel ios swift

1
推荐指数
1
解决办法
403
查看次数

三双的哈希值

让对象保存三个双精度值。如果所有三个值在任何可能的组合中都相等,则两个对象相等。需要一个函数来确定数组中“唯一”对象的数量。我想从数组中创建 Set 并返回计数,但符合 Hashable 协议需要 hashValue 函数......在 Swift 上编码但任何语言(外星人除外)的算法将不胜感激:)

所以我需要三个双精度的 hashValue(值的顺序无关紧要)或任何其他确定数组中唯一对象数量的解决方案

更新: “独特”意味着不相等。正如我上面所说的,等于两个具有双精度值的对象(例如 a、b、c)等于任何可能组合中的所有三个值。例如:

obj1 = (a: 1, b: 2, c: 3)
obj2 = (a: 3, b: 2, c: 1)
// obj1 is equal obj2
Run Code Online (Sandbox Code Playgroud)

double hash set swift

1
推荐指数
1
解决办法
1418
查看次数

当两个版本具有相同的行为时,为什么这个 Swift 游乐场显示不同的执行次数?

我用map函数遍历同一个数组,不一样,为什么遍历的次数不一样?

操场图片


这是代码:

let list = ["1", "2", "3"]

let arr = list.map { $0 + $0 }

let mArr = list.map { str in
    return str + str
}

print(arr)
print(mArr)
Run Code Online (Sandbox Code Playgroud)

swift

1
推荐指数
1
解决办法
51
查看次数

'as'测试在Swift switch语句中始终是真正的警告

我正在使用as Int一个switch案例解开一个可选项.它有效,但编译器会发出警告'as'测试始终为true.这当然是谎言,因为as只有价值不成功才能成功nil.

考虑这个最小的,可验证的例子:

var age: Int?

switch age {
case let y as Int:    // warning: 'as' test is always true
    print(y)
case nil:
    print("it is nil")
}
Run Code Online (Sandbox Code Playgroud)

输出:

它没有

问题:什么是斯威夫特在这里用这个警告思考,是否有更好的方法来解开价值而不必使用力量展开?

swift swift3

1
推荐指数
1
解决办法
1802
查看次数

约束锚在 Swift 4 中运行不佳

我似乎无法弄清楚为什么约束锚不起作用

inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, constant: 150).isActive = true
Run Code Online (Sandbox Code Playgroud)

我试过到处寻找,但似乎找不到问题所在。

我没有看到任何冲突的约束或警告,基本上我需要容器看起来像一个位于屏幕中心的白色矩形。

let inputsContainerView = UIView()
inputsContainerView.backgroundColor = UIColor.white
inputsContainerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(inputsContainerView )
Run Code Online (Sandbox Code Playgroud)

这是它的样子:

这是它的样子

它应该是这样的:

这就是它的样子

constraints swift swift4

1
推荐指数
1
解决办法
2847
查看次数

从后台计时器更新标签

再会,

我正在开发一个工作正常的锻炼应用程序,除非将它移到后台。计时器挂起时暂停。我找到了一个我正在工作的后台计时器示例,但现在我无法让显示锻炼持续时间的 UILabel 工作。在控制台中,它指出我正在从我理解的主线程访问一个对象。我不知道该怎么做是让 UILabel 更新,因为计时器从后台线程中更新,更新标签在主线程中。

这是我所拥有的(打印语句帮助我遵循代码):

import UIKit

class ViewController: UIViewController {

    var time = 0

    var timer = Timer()

    @IBOutlet weak var outputLabel: UILabel!

    @IBOutlet weak var start: UIButton!

    @IBOutlet weak var paused: UIButton!

    @IBAction func startButton(_ sender: UIButton) {

        startButtonPressed()

    }

    @IBAction func pausedButton(_ sender: UIButton) {

        pausedButtonPressed()

    }

    @IBOutlet weak var timerLabel: UILabel!

    func updateTimerLabel() {

        let hours = Int(self.time) / 3600
        let minutes = Int(self.time) / 60 % 60
        let seconds = Int(self.time) % 60 …
Run Code Online (Sandbox Code Playgroud)

background uilabel ios swift

1
推荐指数
1
解决办法
2816
查看次数

CAGradientLayer不填充宽度

我对Swift比较陌生。我只是想设计出租车应用而已。

我发现CGGradientLayer并认为这会为应用程序的顶部栏增加不错的效果。

我添加了它,由于某种原因,它没有完全扩展到视图宽度。

这是我的子类:

import UIKit

class GradientView: UIView {

    let gradient = CAGradientLayer()

    override func awakeFromNib() {
        setupGradientView()
    }

    func setupGradientView() {
        gradient.frame = self.frame
        gradient.colors = [UIColor.white.cgColor, UIColor.init(white: 1.0, alpha: 0.0).cgColor]
        gradient.startPoint = CGPoint.zero
        gradient.endPoint = CGPoint(x: 0, y: 1)
        gradient.locations = [0.9, 1.0]
        self.layer.addSublayer(gradient)
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是结果。

绿色背景实际上UIView是子类也要应用的宽度。

在此处输入图片说明

user-interface ios swift

1
推荐指数
1
解决办法
450
查看次数

带有圆角的 UIBezierPath Star

我使用以下代码通过 UIBezierPath 创建了一个星形图像:

    let path = UIBezierPath()
    let center = CGPoint(x: rect.width / 2.0, y: rect.height / 2.0)
    let xCenter: CGFloat = center.x
    let yCenter: CGFloat = center.y
    let w = rect.width
    let r = w / 2.0
    let flip: CGFloat = -1.0 // use this to flip the figure 1.0 or -1.0
    let polySide = CGFloat(5)
    let theta = 2.0 * Double.pi * Double(2.0 / polySide)
    path.move(to: CGPoint(x: xCenter, y: r * flip + yCenter))
    for i in 1..<Int(polySide) …
Run Code Online (Sandbox Code Playgroud)

ios uibezierpath swift

1
推荐指数
1
解决办法
778
查看次数

函数不让我使用#named:string

我的问题是我的代码不允许我使用下面的代码.出现一条错误消息,说明swift中不再允许#named,我必须加倍命名.

func addBadGuy(#named:string, speed:Float, ypos:CGFloat){

}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,它说"使用未声明的类型'字符串'"

func addBadGuy(named named:string, speed:Float, ypos:CGFloat){

}
Run Code Online (Sandbox Code Playgroud)

function ios swift

0
推荐指数
1
解决办法
35
查看次数

反斜杠在 Swift 中起什么作用?

在下面的代码行中,反斜杠告诉 Swift 做什么?

print("The total cost of my meal is \(dictionary["pizza"]! + dictionary["ice cream"]!)")
Run Code Online (Sandbox Code Playgroud)

string string-interpolation swift

0
推荐指数
1
解决办法
1511
查看次数