我正popoverPresentationController
用来展示我的popover.UITableViewController
用于显示为popover 的用于以编程方式创建,通常包含1到5行.如何设置此弹出窗口以调整tableview内容的大小?
我的popover代码:
if recognizer.state == .Began {
let translation = recognizer.locationInView(view)
// Create popoverViewController
var popoverViewController = UITableViewController()
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.tableView.backgroundColor = UIColor.popupColor()
// Settings for the popover
let popover = popoverViewController.popoverPresentationController!
popover.delegate = self
popover.sourceView = self.view
popover.sourceRect = CGRect(x: translation.x, y: translation.y, width: 0, height: 0)
popover.backgroundColor = UIColor.popupColor()
presentViewController(popoverViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) 在Swift 2.x中我相信我能做到:
let number = 1
let result = Bool(number)
print(result) // prints out: true
Run Code Online (Sandbox Code Playgroud)
但是自从Swift 3以来我一直无法做到这一点并且它给了我错误:
无法使用类型'(Int)'的参数列表调用类型'Bool'的初始化程序
目前我正在使用扩展转换Int
为a,Bool
但我想知道是否没有构建选项来执行此操作.
我有一个协议类Equatable
.这个类看起来像这样:
class Item: Equatable {
let item: [[Modifications: String]]
init(item: [[Modifications: String]]) {
self.item = item
}
}
func ==(lhs: Item, rhs: Item) -> Bool {
return lhs.item == rhs.item
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误(见标题).该属性item
是[[String: String]]
以前,没有问题,我不知道如何解决这个问题.我试着谷歌搜索和搜索所有的SO但没有运气..
枚举只是一个简单的基本:
enum Modifications: Int {
case Add = 1
case Remove = 2
case More = 3
case Less = 4
}
Run Code Online (Sandbox Code Playgroud) 当我运行仪器并检查泄漏时,它显示的泄漏主要包括:
_ContiguousArrayStorage<String>
_NativeDictionaryStorageOwner<Int, CGFloat>
_NativeDictionaryStorageOwner<String, AnyObject>
Run Code Online (Sandbox Code Playgroud)
这是我使用Swift 3并在使用iOS 10的设备上进行测试的时候.
泄漏仅出现在iOS 10中,而在iOS 9.x上,一切似乎都是正常的.最重要的是,在iOS 10 UISwitch
中似乎也没有解除分配.
目前我一直在创建各种各样的解决方法,试图避免使用字典,在某些情况下使用数组,这使得代码真的很烦人.
题:
我是否应该关注这一点,并尝试解决所有这些泄漏或等待并希望它将在未来的更新中修复?如果是这样,是否有任何地方可以检查哪些错误已知?
我想覆盖属性观察者并调用"super.didSet".那可能吗?
class Foo {
var name: String = "" { didSet { print("name has been set") } }
}
class Bar: Foo {
override var name: String = "" {
didSet {
print("print this first")
// print the line set in the superclass
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想将我的值四舍五入到最接近的 5 美分,例如:
5.31 -> 5.30
5.35 -> 5.35
5.33 -> 5.35
5.38 -> 5.40
Run Code Online (Sandbox Code Playgroud)
目前我通过使用以下方法获取十进制值来做到这一点:
let numbers = 5.33
let decimal = (numbers - rint(numbers)) * 100
let rounded = rint(numbers) + (5 * round(decimal / 5)) / 100
// This results in 5.35
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法,步骤更少,因为有时numbers - rint(numbers)
会给我一个奇怪的结果,例如:
let numbers = 12.12
let decimal = (numbers - rint(numbers)) * 100
// This results in 11.9999999999999
Run Code Online (Sandbox Code Playgroud) 我有一个类作为属性与属性观察者.如果我在该类中更改某些内容,是否有办法触发didSet,如示例所示:
class Foo {
var items = [1,2,3,4,5]
var number: Int = 0 {
didSet {
items += [number]
}
}
}
var test: Foo = Foo() {
didSet {
println("I want this to be printed after changing number in test")
}
}
test.number = 1 // Nothing happens
Run Code Online (Sandbox Code Playgroud) 在 Swift 2.x 中,我能够做到:
let str = "Line 1\nLine 2\r\nLine 3\n"
let newlineChars = NSCharacterSet.newlineCharacterSet()
let lines = str.utf16.split { newlineChars.characterIsMember($0) }.flatMap(String.init)
Run Code Online (Sandbox Code Playgroud)
但是在 Swift 3.x 中它发生了变化。有人能告诉我如何在 Swift 3 中使用它吗?
我正在尝试将Objective-C应用程序转换为Swift但我仍然坚持setBounds
.原始代码如下所示:
- (void)setBounds:(CGRect)bounds {
[super setBounds:bounds];
// code
}
Run Code Online (Sandbox Code Playgroud)
Swift中的等价物是什么?我试过看文件和谷歌,但似乎无法搞清楚.
我有一个自定义按钮,它被添加到静态单元格.不管怎样,每当我点击按钮时,它都不会像按钮被添加到普通普通视图那样立即做出反应.
点击时,它会立即注册水龙头,但在更改前背景颜色稍有延迟.
要改变颜色,我的子类中有以下代码UIButton
:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
border.fillColor = .redColor() // border is a CAShapeLayer
print("began") // This prints right when the button is clicked
}
Run Code Online (Sandbox Code Playgroud)
此按钮添加在子类中UITableViewCell
,按钮正在响应,除了更改颜色有延迟.我怎样才能解决这个问题?
答案(Jelly):Jelly
的答案给了我很多帮助,让按钮的反应更好一些.知道问题是什么也使研究问题更容易,并发现按钮的反应就像在普通视图中一样,我必须delaysContentTouches
在表视图和它的子视图中禁用它们:
tableView.delaysContentTouches = false
tableView.subviews.forEach { ($0 as? UIScrollView)?.delaysContentTouches = false }
Run Code Online (Sandbox Code Playgroud) 有NSDecimalNumber
一种方法可以对数字进行四舍五入,IE
let handler = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let example: NSDecimalNumber = 1.345
let rounded: NSDecimalNumber = example.rounding(accordingToBehavior: handler)
Run Code Online (Sandbox Code Playgroud)
现在我已经切换到Decimal
,它似乎没有像NSDecimalNumber
有的那样对数字进行四舍五入的方法。我应该将其投射到NSDecimalNumber
并将其投射回以Decimal
将其四舍五入,还是有更好、更优雅的方法来四舍五入 a Decimal
?
编辑:做了一个更好的例子
swift ×10
swift3 ×4
uitableview ×2
boolean ×1
button ×1
decimal ×1
didset ×1
enums ×1
equatable ×1
instruments ×1
int ×1
ios ×1
ios10 ×1
memory-leaks ×1
objective-c ×1
observers ×1
popover ×1
properties ×1
resize ×1
rounding ×1
string ×1