标签: swift2.2

如何在?:ternary运算符中重写Swift ++运算符

我有以下代码

var column = 0

column = column >= 2 ? 0 : ++column
Run Code Online (Sandbox Code Playgroud)

从2.2开始我得到折旧警告,任何想法如何解决这个问题?

我有这个解决方案:

if column >= 2 {
    column = 0
} else {
    column += 1
}
Run Code Online (Sandbox Code Playgroud)

但这不是很好.

swift swift2.2

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

如何在Swift的AnyClass上使用performSelector()调用类方法?

在ObjC中,您只需使用类方法调用类方法即可NSObject.

[Machine performSelector:@selector(calculate:) withObject:num];
Run Code Online (Sandbox Code Playgroud)

但是你如何在Swift 2.2中做到这一点?

@objc(Machine) // put it here, so you can simply copy/paste into Playground
class Machine: NSObject {
    static func calculate(param: NSNumber) -> String {
        if param.integerValue > 5 {
            return "42"
        }
        return "42" // there is only 1 answer to all the questions :D
    }
}

if let aClass = NSClassFromString("Machine") {
    let sel = #selector(Machine.calculate(_:))
    let num = NSNumber(integer: 1337)
    let answer = aClass.performSelector(sel, withObject: num) // compiler error
    // let …
Run Code Online (Sandbox Code Playgroud)

reflection ios performselector swift swift2.2

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

如何使用Swift 3选择器?

到目前为止,我已经有了这个代码

if UIScreen.instancesRespondToSelector(Selector("scale")) {
  UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale);
}else{...}
Run Code Online (Sandbox Code Playgroud)

我没有写这个代码,所以我不确定它是什么,但看起来他们想要验证UIScreen.mainScreen()实际上可以有变量.scale(?).

在查看时.scale,它看起来像iOS 4.0以来一直可用.由于我们支持iOS 7,这不是必需的,对吧?

无论如何,这不是当前的问题.由于Xcode 7.3向Swift 3发出了这些新的选择器实例或诸如此类的东西,我现在有数百个警告.

Xcode要我改变这个:

Selector("scale")

#selector(NSDecimalNumberBehaviors.scale)

到现在为止,我已经改变了所有其他选择已经合乎逻辑的,如"改变Selector("hello")#selector(MyClass.hello),但是这NSDecimal..听起来有点激烈.我可以信任的Xcode选择正确的选择?我找不到NSDecimalNumberBehaviors任何地方连接到UIScreen.scale ..如果我键入#selector(UIScreen.scale)我得到一个错误..

我唯一知道的是,如果我CMD +点击scale这里:NSDecimalNumberBehaviors.scale在这里:UIScreen.mainScreen().scale我最终在不同的地方..

ios swift swift2.2

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

在iOS Universal app中启动屏幕故事板约束

我正在LaunchScreen.storyboard为Xcode 7.3中的iOS Universal应用程序创建一个文件.

我必须只使用在storyboard中定义的约束,因为启动屏幕将在应用程序加载之前显示(无法在UIViewController子类中以编程方式配置约束).

主要的背景图像UIViewController

  • 纵横比(3456:2592),
  • 垂直居中
  • 居中水平约束.

我试图获得以下条件:

  • 保持背景图像长宽比,
  • 屏幕宽度<=屏幕高度backgroundImageView.Top = containerView.Top时激活 在此输入图像描述
  • 屏幕宽度>屏幕高度backgroundImageView.Leading = containerView.Leading - 20时激活 在此输入图像描述

问题是按大小类定义的故事板约束不足以表达屏幕宽度>/<=屏幕高度等条件(例如:iPad Air Fullscreen总是有规则的宽度和高度,但屏幕宽度<纵向模式下的屏幕高度屏幕宽度>横向模式下的屏幕高度).

我还尝试定义设备设置的背景图像资产,但它只允许指定iPhone/iPad x1,x2和x3版本的图像.

xcode ios swift xcode7 swift2.2

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

在 for 语句中使用 String.CharacterView.Index.successor()

将来,C 风格的 for 语句将从 Swift 中删除。虽然有许多替代方法可以使用 C 风格的 for 语句,例如 usingstride..<运算符,但这些仅适用于某些条件

例如,在旧版本的 swift 中,可以String.CharacterView.Index使用 C 样式的 for 语句循环遍历字符串的每个其他索引 ,

for var index = string.startIndex; index < string.endIndex; index = string.successor().successor(){
    //code
}
Run Code Online (Sandbox Code Playgroud)

然而,这现在已被弃用。有一种方法可以做同样的事情,使用while循环

var index = string.startIndex
while index < string.endIndex{
    //code

    index = index.successor().successor()
}
Run Code Online (Sandbox Code Playgroud)

但这只不过是一种解决方法。有..<运算符,它非常适合循环遍历字符串的每个索引

for index in string.startIndex..<string.endIndex
Run Code Online (Sandbox Code Playgroud)

然而,这无助于循环遍历字符串的每个其他索引或字符串的每个第 n 个索引

除了循环之外,还有更多“快速”的方式来循环遍历字符串的所有其他索引while吗?这个问题不仅与字符串索引有关,而且只与具有.successor()一般功能的对象有关,例如wherestride..<don't work。

ios swift swift2 swift2.2

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

没有用Objective-C Selector声明的方法用于通知UIKeyboardWillShowNotification和UIKeyboardWillHideNotification

在最近更新Xcode之后,以前工作的代码不再有效.大多数选择器(":")都有自动更正,但此代码除外:

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
}
Run Code Online (Sandbox Code Playgroud)

标记错误:

没有使用Objective C选择器'keyboardWillSHow:'声明的方法

此图像显示了所有失败的尝试.

在此输入图像描述

这段代码的新语法是什么?

keyboard uitextfield swift xcode7 swift2.2

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

String to Double转换在Swift中失去了精度

我想将一个字符串转换为double并保持相同的值:

let myStr = "2.40"
let numberFormatter = NSNumberFormatter()
numberFormatter.locale = NSLocale(localeIdentifier: "fr_FR")
let myDouble = numberFormatter.numberFromString(myStr)?.doubleValue ?? 0.0
Run Code Online (Sandbox Code Playgroud)

myDouble现在

Double? 2.3999999999999999
Run Code Online (Sandbox Code Playgroud)

那么如何将"2.40"转换为精确到2.40为双?

更新:

即使转换后舍入也似乎不起作用

我不想打印,我想计算,重要的是数字应该是正确的,这是货币计算和费率

floating-point double nsnumberformatter ios swift2.2

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

在执行循环之前,无法形成带结束<开始检查范围的范围?

我遇到了一些我不太了解的快速代码的变化.

var arr = []
for var i = 1; i <= arr.count; i += 1
{
    print("i want to see the i \(i)")
}
Run Code Online (Sandbox Code Playgroud)

我有一个程序获取一个也可以为空的结果数组.这对于上面的for循环没有问题.现在,苹果希望我将代码更改为以下内容.但是如果数组为空,这将崩溃.

var arr = []
for i in 1...arr.count
{
   print("i want to see the i \(i)")
}
Run Code Online (Sandbox Code Playgroud)

在我做循环之前,我是否真的必须首先检查范围?

var arr = []
if (arr.count >= 1){
    for i in 1...arr.count
    {
        print("I want to see the i \(i)")
    }
}
Run Code Online (Sandbox Code Playgroud)

有更聪明的解决方案吗?

macos swift swift2.2

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

如何将系统字体与属性字符串一起使用?

let attributedText: NSMutableAttributedString = NSMutableAttributedString(string: text, attributes: [NSFontAttributeName: UIFont(name: "San Francisco", size: 14.0)!])
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,当我运行我的应用程序时,它崩溃了,因为它找不到“旧金山”字体。但这不是iOS 9的系统字体吗?如何在属性字符串中使用系统字体?

我正在使用 Swift 2.2

fonts nsattributedstring nsmutableattributedstring swift swift2.2

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

在swift Array中删除对象的更好方法是什么

在Swift中从数组中删除对象的更好方法是什么?

var testArray:[SomeObject]
let willRemoveObj:SomeObject
...

testArray = testArray.filter({ $0 != willRemoveObj })
Run Code Online (Sandbox Code Playgroud)

要么

guard let index = testArray.indexOf(willRemoveObj) else {
  return
}
testArray.removeAtIndex(index)
Run Code Online (Sandbox Code Playgroud)

arrays swift swift2.2

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