当我在视图中创建标签(从Object库中拖动)并使IBOutlet连接标签和viewController(Ctrl和拖动)时,Xcode生成的默认代码是,例如,@IBOutlet weak var displayColumn: UILabel!
我可以删除感叹号并将其设置为UILable
唯一.但是必须有一个很好的理由Xcode希望它是一个强制解包的可选类型.
问题:我认为我不明白在这里使用可选类型的原因.因为我已经在我的视图中创建了一个标签并将其连接到我的控制器,所以它确实存在,它存在,我创建它.为什么Xcode想要一个选项作为默认类型?如果它说标签内的文字是一个选项,那对我来说听起来很合理,因为标签在运行时的某个时刻可能是空的.
非常感谢
让对象保存三个双精度值。如果所有三个值在任何可能的组合中都相等,则两个对象相等。需要一个函数来确定数组中“唯一”对象的数量。我想从数组中创建 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) 我用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) 我正在使用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)
输出:
它没有
问题:什么是斯威夫特在这里用这个警告思考,是否有更好的方法来解开价值而不必使用力量展开?
我似乎无法弄清楚为什么约束锚不起作用
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)
这是它的样子:
它应该是这样的:
再会,
我正在开发一个工作正常的锻炼应用程序,除非将它移到后台。计时器挂起时暂停。我找到了一个我正在工作的后台计时器示例,但现在我无法让显示锻炼持续时间的 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) 我对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
是子类也要应用的宽度。
我使用以下代码通过 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) 我的问题是我的代码不允许我使用下面的代码.出现一条错误消息,说明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) 在下面的代码行中,反斜杠告诉 Swift 做什么?
print("The total cost of my meal is \(dictionary["pizza"]! + dictionary["ice cream"]!)")
Run Code Online (Sandbox Code Playgroud) swift ×10
ios ×5
uilabel ×2
background ×1
constraints ×1
double ×1
function ×1
hash ×1
optional ×1
set ×1
string ×1
swift3 ×1
swift4 ×1
uibezierpath ×1
xcode ×1