小编Hen*_*Lee的帖子

如何在swift中将我的popover调整到tableview中内容的大小?

我正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)

resize uitableview popover swift

28
推荐指数
4
解决办法
3万
查看次数

将Int转换为Bool

在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但我想知道是否没有构建选项来执行此操作.

int boolean swift swift3

28
推荐指数
5
解决办法
3万
查看次数

二元运算符'=='不能应用于两个操作数

我有一个协议类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)

enums swift equatable

18
推荐指数
1
解决办法
2万
查看次数

Swift 3/iOS 10泄漏

当我运行仪器并检查泄漏时,它显示的泄漏主要包括:

_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中似乎也没有解除分配.

目前我一直在创建各种各样的解决方法,试图避免使用字典,在某些情况下使用数组,这使得代码真的很烦人.

题:

我是否应该关注这一点,并尝试解决所有这些泄漏或等待并希望它将在未来的更新中修复?如果是这样,是否有任何地方可以检查哪些错误已知?

memory-leaks instruments swift swift3 ios10

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

覆盖didSet

我想覆盖属性观察者并调用"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)

properties swift

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

最接近五的圆形货币

我想将我的值四舍五入到最接近的 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)

rounding swift

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

有没有办法在更改类中的属性时让didSet工作?

我有一个类作为属性与属性观察者.如果我在该类中更改某些内容,是否有办法触发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)

observers propertychanged swift didset

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

使用字符集拆分字符串

在 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 中使用它吗?

string swift swift3

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

Swift中的setBounds

我正在尝试将Objective-C应用程序转换为Swift但我仍然坚持setBounds.原始代码如下所示:

- (void)setBounds:(CGRect)bounds {
    [super setBounds:bounds];

    // code
}
Run Code Online (Sandbox Code Playgroud)

Swift中的等价物是什么?我试过看文件和谷歌,但似乎无法搞清楚.

objective-c swift

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

表视图单元格中的按钮

我有一个自定义按钮,它被添加到静态单元格.不管怎样,每当我点击按钮时,它都不会像按钮被添加到普通普通视图那样立即做出反应.

点击时,它会立即注册水龙头,但在更改前背景颜色稍有延迟.


要改变颜色,我的子类中有以下代码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)

button uitableview ios swift

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

四舍五入小数

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

编辑:做了一个更好的例子

decimal nsdecimalnumber swift3

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