我正在学习Swift的语法并且想知道为什么下面的代码不能正常工作,因为我期望它:
for i in 1...100{
switch (i){
case 1:
Int(i%3) == 0
println("Fizz")
case 2:
Int(i%5) == 0
println("Buzz")
default:
println("\(i)")
}
}
Run Code Online (Sandbox Code Playgroud)
我想在每次数字被3(3,6,9,12等)整除时打印Fizz,并在每次被5整除时打印Buzz.缺少什么部分的拼图?
注意:我确实使用以下方法解决了它:
for ( var i = 0; i < 101; i++){
if (Int(i%3) == 0){
println("Fizz")
} else if (Int(i%5) == 0){
println("Buzz")
} else {
println("\(i)")
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用Switch解决这个问题.谢谢.
我想删除2个视图之间的界限.分隔2 UITableViewCells 的行:
我声明了表视图如下:
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
self.tableView.scrollEnabled = NO;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.estimatedRowHeight = 85.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
Run Code Online (Sandbox Code Playgroud)
所以我其实写了 - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
为什么它仍然存在?
关于iOS开发人员访谈的最常见问题之一是 - 抽象类和界面之间的区别.
我不知道答案,我也不知道答案.当您声明方法时,接口是类的一部分.它可以对其他类(public,.h文件)开放或隐藏在实现中.
抽象类是一个类,它只用于创建隐藏的子类,它不应该有自己的init方法(如果我理解正确的话).
那么,这个问题的答案到底是什么?这个问题意味着什么?
我确实花了很多时间寻找答案,但答案与Obj-C无关,所以我不知道自己.
我希望有人可以提供明确的答案,这个问题对那些想要通过面试的人有所帮助.
我正在研究Swift,并且对以下语法感到困惑:
var treasures: [Treasure] = []
Run Code Online (Sandbox Code Playgroud)
宝藏是自定义类,声明如下:
class Treasure: NSObject {
...
Run Code Online (Sandbox Code Playgroud)
在Obj-C中,方括号表示方法,但这意味着什么:
var treasures: [Treasure] = []
Run Code Online (Sandbox Code Playgroud)
有人可以提供解释吗?谢谢!
我有UIView子类,并且为了布局UI元素,我没有使用自动布局.我想设置框架取决于框架的宽度或高度.但是,当我在alloc]init]方法之后立即执行此操作时,它看起来像self.frame.size.height或width为零.对于临时解决方案我做了以下:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.25 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
UIImage *img = [UIImage imageNamed:@"sound_level_arrow"];
_arrowImgView = [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width/2, 0, img.size.width, img.size.height)];
_arrowImgView.center = CGPointMake(self.mainImgView.frame.size.width/2, self.mainImgView.frame.size.height-2);
_arrowImgView.image = [UIImage imageNamed:@"sound_level_arrow"];
_arrowImgView.contentMode = UIViewContentModeCenter;
[self.mainImgView addSubview:_arrowImgView];
});
Run Code Online (Sandbox Code Playgroud)
但是当然我需要知道,当视图完成加载并且它具有实际的self.frame.size.width和height.
我正在尝试为我的UIBarButtonItem设置图像,但我无法做到这一点.我尝试了两次,在第一种情况下,我将我的图像放在正确的位置,但是当我点击按钮时没有任何反应(它应该会弹出一个新窗口,但没有任何效果).我使用的是一段代码:
UIImage *faceImage = [UIImage imageNamed:@"plus_button.png"];
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom];
face.bounds = CGRectMake( 0, 0, faceImage.size.width, faceImage.size.height );
[face setImage:faceImage forState:UIControlStateNormal];
UIBarButtonItem *faceBtn = [[[UIBarButtonItem alloc] initWithCustomView:face]initWithImage:faceImage style:UIBarButtonItemStylePlain target:self action:@selector(addProduct:)];
self.navigationItem.leftBarButtonItem = faceBtn;
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我在按钮上设置图像并且应该出现新窗口,但是不仅我想要的自定义图像,而且它还显示"边框",看起来图像被放在默认按钮的中心.显然我只想要我的图像,而不仅仅是我的图像.我在第二种情况下使用了一段代码:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWithImage:faceImage style:UIBarStyleDefault target:self action:@selector(addProduct:)];
self.navigationItem.leftBarButtonItem = addButton;
Run Code Online (Sandbox Code Playgroud)
请帮我解决问题,任何帮助都将不胜感激,谢谢!
在Swift中,我有一个返回某种对象的函数.该对象是可选的.当它不存在时,我想我应该返回零,但斯威夫特禁止我这样做.以下代码无效:
func listForName (name: String) -> List {
if let list = listsDict[name] {
return list
} else {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
它说 : nil
但我不想返回类似空List对象的东西,我想在Optional为空时返回任何内容.怎么做?
我有枚举:
enum RetailDemandReturnOperation {
case salesReturn(value: MSRetailSalesReturnRealm)
case demand(value: MSRetailDemandRealm)
}
Run Code Online (Sandbox Code Playgroud)
MSRetailDemandRealm并且MSRetailDemandRealm都实现相同的协议,具有变量标题和统计信息.我想提取这些值,但我不关心实际存储的是哪个对象.请考虑以下内容:
switch data! {
case .salesReturn(let object):
titleString = object.title
statistics = object.stats
case .demand(let object):
titleString = object.title
statistics = object.stats
break
}
Run Code Online (Sandbox Code Playgroud)
我必须进入每个枚举值以获得协议的属性.我有什么方法可以做得更短更清洁?获取相关值,无论它是什么,只要它符合我的协议,并获得协议值?谢谢.
我想为我的班级创建 init ,它可能看起来像这样:
initWithSomeMode { // Not compilable
self.init()
self.customSetup()
}
Run Code Online (Sandbox Code Playgroud)
当然上面的代码不起作用,我只是想展示我想要实现的目标。
我只能在 Swift 类中看到方便的 init,但在这种情况下,我需要添加参数,但我不需要它们。
所以,我可能会通过方便的 init 来实现这一点:
convenience init(foo: String?) {
self.init()
self.customSetup()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法创建没有参数的自定义初始化?
我正在学习GCD机制,我有几个问题.如果你纠正我,如果我的材料有问题,我将不胜感激.
1.问题)据我所知,GCD有4个不同优先级的全局并发队列.例如,当我们写作时DISPATCH_QUEUE_PRIORITY_HIGH,我们得到一个这样的队列.队列不是空的,一些Apple系统进程在它们上面运行.因此,当我们在某个队列中添加代码块时,例如,当n是随机整数时,它可以是一行中的n个数字任务.
现在,当我们添加代码块时,就像
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
// Heavy calculations
});
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad,所有UI组件将被阻止,直到:
我对吗?我知道,我们应该dispatch_async在这里使用,我只是想知道事情是如何运作的.
2.问题)据我所知,所有全局队列都是并发队列,这意味着它可以通过上下文切换或并行来管理任务.但是,当我们通过dispatch_sync到达那个队列时,我们被迫等待,所有的工作都将完成.在这种情况下唯一不同于串行队列的是操作顺序.例如,如果串行队列有任务1,任务2,任务3和任务4,它将严格按顺序执行此操作,但并发队列可以更改它的顺序,以首先完成轻量级操作.
所以,我的问题是,我们为什么要这样做dispatch_sync?根据我的理解,主线程将被阻止,直到dispach_sync代码块完成.