protocol Car {
var wheels : Int { get set}
init(wheels: Int)
}
extension Car {
init(wheels: Int) {
self.wheels = wheels
}
}
Run Code Online (Sandbox Code Playgroud)
on self.wheels = wheels我得到了错误
Error: variable 'self' passed by reference before being initialized
Run Code Online (Sandbox Code Playgroud)
如何在协议扩展中定义初始化程序?
我无法将图像快速旋转90度.我写了下面的代码,但有一个错误,不编译
func imageRotatedByDegrees(oldImage: UIImage, deg degrees: CGFloat) -> UIImage {
//Calculate the size of the rotated view's containing box for our drawing space
let rotatedViewBox: UIView = UIView(frame: CGRect(x: 0, y: 0, width: oldImage.size.width, height: oldImage.size.height))
let t: CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat(M_PI / 180))
rotatedViewBox.transform = t
let rotatedSize: CGSize = rotatedViewBox.frame.size
//Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize)
let bitmap: CGContext = UIGraphicsGetCurrentContext()!
//Move the origin to the middle of the image so we will rotate and scale around …Run Code Online (Sandbox Code Playgroud) 我似乎无法在SDK中找到如何以编程方式感知iPhone上的静音按钮/开关.当我的应用程序播放背景音乐时,它会正确响应音量按钮,而我没有任何代码可以遵循,但是,当我使用静音开关时,它只是继续播放.
如何测试静音的位置?
(注意:我的程序有自己的静音开关,但我希望物理开关覆盖它.)
谢谢!
Swift书中有一些例子分别展示了相关的值和原始值,有没有办法用两个特征一起定义枚举?
我试图将它们组合在一起但却出错了:
enum Barcode :String {
case UPCA(Int, Int, Int) = "Order 1" // Enum with raw type cannot have cases with arguments
case QRCode(String) = "Order 2" // Enum with raw type cannot have cases with arguments
}
Run Code Online (Sandbox Code Playgroud) Codable似乎是一个非常令人兴奋的功能.但我想知道我们如何在核心数据中使用它?特别是,是否可以直接从/向NSManagedObject编码/解码JSON?
我尝试了一个非常简单的例子:
并定义Foo自己:
import CoreData
@objc(Foo)
public class Foo: NSManagedObject, Codable {}
Run Code Online (Sandbox Code Playgroud)
但是当它像这样使用时:
let json = """
{
"name": "foo",
"bars": [{
"name": "bar1",
}], [{
"name": "bar2"
}]
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let foo = try! decoder.decode(Foo.self, from: json)
print(foo)
Run Code Online (Sandbox Code Playgroud)
编译器因此错误而失败:
super.init isn't called on all paths before returning from initializer
Run Code Online (Sandbox Code Playgroud)
目标文件是定义的文件 Foo
我想我可能做错了,因为我甚至没有通过NSManagedObjectContext,但我不知道在哪里坚持下去.
核心数据是否支持Codable?
我已经多次看过这个问题,但令人惊讶的是,我没有看到一致的答案,所以我会自己尝试一下:
如果你有一个包含你自己的自定义UITableViewCells的tableview,它包含UITextViews和UILabels,其高度必须在运行时确定,你应该如何确定heightForRowAtIndexPath中每一行的高度?
最明显的第一个想法是通过计算并然后对cellForRowAtIndexPath内单元格内每个视图的高度求和来计算每个单元格的高度,并存储该最终总高度以供以后检索.
但这不起作用,因为cellForRowAtIndexPath被称为AFTER heightForRowAtIndexPath.
我唯一能想到的是在viewDidLoad中进行所有计算,然后创建所有UITableViewCells,计算单元格高度并将其存储在UITableViewCell子类内的自定义字段中,并将每个单元格放在NSMutableDictionary中,其中indexPath为键,然后使用cellForRowAtIndexPath和heightForRowAtIndexPath中的indexPath从字典中检索单元格,返回自定义高度值或单元格对象本身.
这种方法似乎是错误的,因为它没有使用dequeueReusableCellWithIdentifier,而是我将所有单元格一次加载到我的控制器中的字典中,并且委托方法只是从字典中检索正确的单元格.
我没有看到任何其他方法来做到这一点.这是一个坏主意 - 如果是这样,这样做的正确方法是什么?
在Mac OS X中,您可以找到第一个响应者:
[[self window] firstResponder]
Run Code Online (Sandbox Code Playgroud)
在iOS中有什么办法吗?或者您是否需要枚举子控件isFirstResponder并向每个控件发送消息?
我必须承认我已经有很长一段时间没有这个问题,从来没有真正理解过.
说auth令牌就像一个保险箱的钥匙,当它到期时它不再可用了.现在我们给了一个魔术刷新令牌,可用于获取另一个可用的键,另一个......直到魔术键到期.那么为什么不将auth令牌的到期时间设置为与刷新令牌相同?为什么这么麻烦?
它的正当理由是什么,也许是历史原因?真的很想知道.谢谢
从一个大的[String]和一个给定的子数组大小开始,我可以将这个数组拆分成更小的数组的最佳方法是什么?(最后一个数组将小于给定的子数组大小).
具体例子:
最大分割尺寸2分割["1","2","3","4","5","6","7"]
代码会产生[["1","2"],["3","4"],["5","6"],["7"]]
显然我可以手动更多一点,但我觉得像map()或reduce()这样的东西可以做我想要的非常漂亮的东西.
有人可以解释何时何时不对Swift中的委托指针使用"弱"赋值,为什么?
我的理解是,如果你使用一个未定义为类的协议,你不能也不想将你的委托指针指向weak.
protocol MyStructProtocol{
//whatever
}
struct MyStruct {
var delegate: MyStructProtocol?
}
Run Code Online (Sandbox Code Playgroud)
但是,当您的协议被定义为类类型协议时,您是否要将您的委托设置为弱指针?
protocol MyClassProtocol:Class{
//whatever
}
class MyClass {
weak var delegate: MyClassProtocol?
}
Run Code Online (Sandbox Code Playgroud)
我对么?在Apple的快速指南中,类协议示例并未使用弱分配,但在我的测试中,如果我的代表没有被弱引用,我会看到强大的引用周期.
delegates memory-leaks memory-management swift strong-reference-cycle
swift ×6
ios ×5
access-token ×1
algorithm ×1
animation ×1
audio ×1
cocoa-touch ×1
codable ×1
core-data ×1
delegates ×1
enums ×1
memory-leaks ×1
oauth ×1
protocols ×1
reloaddata ×1
swift2 ×1
swift4 ×1
uiresponder ×1
uitableview ×1
uiview ×1
xcode9 ×1