我有以下代码
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)
但这不是很好.
在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) 到目前为止,我已经有了这个代码
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
我最终在不同的地方..
我正在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版本的图像.
将来,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。
在最近更新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:'声明的方法
此图像显示了所有失败的尝试.
这段代码的新语法是什么?
我想将一个字符串转换为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为双?
更新:
即使转换后舍入也似乎不起作用
我不想打印,我想计算,重要的是数字应该是正确的,这是货币计算和费率
我遇到了一些我不太了解的快速代码的变化.
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)
有更聪明的解决方案吗?
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
在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)