小编Evg*_*ban的帖子

在Swift中切换语句

我正在学习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解决这个问题.谢谢.

switch-statement ios swift

35
推荐指数
3
解决办法
8万
查看次数

删除UITableView分隔线

我想删除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;

为什么它仍然存在?

objective-c uitableview ios

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

Objective-C中抽象类和接口的区别

关于iOS开发人员访谈的最常见问题之一是 - 抽象类和界面之间的区别.

我不知道答案,我也不知道答案.当您声明方法时,接口是类的一部分.它可以对其他类(public,.h文件)开放或隐藏在实现中.

抽象类是一个类,它只用于创建隐藏的子类,它不应该有自己的init方法(如果我理解正确的话).

那么,这个问题的答案到底是什么?这个问题意味着什么?

我确实花了很多时间寻找答案,但答案与Obj-C无关,所以我不知道自己.

我希望有人可以提供明确的答案,这个问题对那些想要通过面试的人有所帮助.

objective-c

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

语法解释:Swift中的方括号

我正在研究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)

有人可以提供解释吗?谢谢!

arrays ios swift

10
推荐指数
2
解决办法
8278
查看次数

确定UIView何时完成布局

我有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.

objective-c uiview ios

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

无法为UIBarButtonItem设置图像

我正在尝试为我的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)

请帮我解决问题,任何帮助都将不胜感激,谢谢!

iphone objective-c uitableview uibarbuttonitem ios

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

在快速功能中返回nil

在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为空时返回任何内容.怎么做?

swift

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

Swift在没有开关的情况下获取枚举中的关联值

我有枚举:

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)

我必须进入每个枚举值以获得协议的属性.我有什么方法可以做得更短更清洁?获取相关值,无论它是什么,只要它符合我的协议,并获得协议值?谢谢.

ios swift

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

Swift 使用自定义名称创建不带参数的自定义初始值设定项

我想为我的班级创建 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)

有没有办法创建没有参数的自定义初始化?

swift

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

了解dispatch_sync和全局队列

我正在学习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组件将被阻止,直到:

  1. Apple系统任务将完成(因为我们在该队列中最后添加任务,应该等到其他系统任务完成)
  2. 直到我们的代码完成.

我对吗?我知道,我们应该dispatch_async在这里使用,我只是想知道事情是如何运作的.

2.问题)据我所知,所有全局队列都是并发队列,这意味着它可以通过上下文切换或并行来管理任务.但是,当我们通过dispatch_sync到达那个队列时,我们被迫等待,所有的工作都将完成.在这种情况下唯一不同于串行队列的是操作顺序.例如,如果串行队列有任务1,任务2,任务3和任务4,它将严格按顺序执行此操作,但并发队列可以更改它的顺序,以首先完成轻量级操作.

所以,我的问题是,我们为什么要这样做dispatch_sync?根据我的理解,主线程将被阻止,直到dispach_sync代码块完成.

multithreading objective-c ios

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