小编Der*_*328的帖子

Xcode playgrounds无法访问Sources文件夹中的swift文件

我刚刚升级到Xcode 6.3,他们为Playgrounds提供了一些新功能.如果您创建一个新的游乐场并打开项目导航器,您将看到一个Sources文件夹,里面有一个"SupportCode.swift"文件.它在该文件的顶部读取

此文件(以及此操场的Sources目录中的所有其他Swift源文件)将预编译到一个框架中,该框架可自动提供给.playground.

我尝试将功能放到那里,我的操场无法使用.我究竟做错了什么?我是否必须手动手动编译SupportCode.swift文件?怎么样?

swift swift-playground xcode6.3

56
推荐指数
3
解决办法
2万
查看次数

Swift枚举具有相同值的多个案例

在C中你可以让你的枚举有这个

typedef enum _Bar {
    A = 0,
    B = 0,
    C = 1
} Bar;
Run Code Online (Sandbox Code Playgroud)

在swift中,我想做同等的事情.但是编译器抱怨它不是唯一的.我如何告诉它我希望两个案例具有相同的价值?

enum Bar : Int {
    case A = 0
    case B = 0 //Does not work
    case C = 1
}
Run Code Online (Sandbox Code Playgroud)

我试过了

case A | B = 0
Run Code Online (Sandbox Code Playgroud)

case A, B = 0
Run Code Online (Sandbox Code Playgroud)

但它似乎不像我想要的那样工作.我感谢任何帮助.

enums swift

23
推荐指数
3
解决办法
8624
查看次数

滚动时ios8 UITableView滚动会跳回

我的UItableView有一个奇怪的情况.

我正在从互联网上加载图像并以异步方式在uitableviewcell中呈现它们.当我向下滚动(即第1行到第6行)时,滚动按照我的预期顺利向下滚动.

然而,然后我向上滚动(ig行6到1)滚动向后跳.例如,如果我从第6行滚动到第5行,它将跳回到第6行.第二次我尝试向上滚动它让我上升到第4行,但然后它将我滚动回第5行或第6行但通常只有5.

我不明白为什么这只发生在一个方向.

它似乎影响ios 8但不影响ios 7.

因此,ios8和7如何处理uitableview是一个实现差异.

我怎样才能解决这个问题?


这里有一些代码可以为您提供一些上下文

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CVFullImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    CVComicRecord *comicRecord = self.comicRecords[indexPath.row];
    [cell.loaderGear stopAnimating];
    [cell.text setText:comicRecord.title];
    NSString *UUID = comicRecord.fullImagePageURL.absoluteString;
    [cell setUUID:UUID];
    //Check if image is in the cache
    UIImage *fullImage = [self.contentViewCache objectForKey:UUID];
    [cell setComicFullImage:fullImage];

    if (fullImage) {
        return cell;
    }

    [cell.loaderGear startAnimating];

    [self requestImageForIndexPath:indexPath];
    return cell;
}

- (void)requestImageForIndexPath:(NSIndexPath *)indexPath {
    CVComicRecord *comicRecord = self.comicRecords[indexPath.row];
    NSString *UUID = comicRecord.fullImagePageURL.absoluteString;

    if ([self.contentViewCache objectForKey:UUID]) { …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview ios ios7 ios8

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

Swift属性覆盖不起作用

当我尝试覆盖属性时,我收到错误"无法覆盖具有只读属性的可变属性"

我已经在超类中提供了get和set.

class Card {
    var contents:String {
        get {
            return self.contents
        }
        set {
            self.contents = newValue
        }
    }
    init() {
        self.contents = ""
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Subclass,我试图覆盖"contents"属性.

class PlayingCard: Card {
    override var contents:String { //<-- this is where I get the build error
        get {
            var rankStrings:Array<String> = PlayingCard.rankStrings()
            return rankStrings[Int(self.rank)] + self.suit
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

overriding properties swift ios8

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

如何在不使用脚本去除模拟器切片的情况下创建动态框架

我想创建一个动态框架并分发它.它需要在模拟器,iPhone设备上运行时工作,并能够提交到App Store.

我知道lipo感谢本指南.它展示了我们如何将模拟器架构与iphone架构结合到一个动态框架中,该框架可以在不分发源代码的情况下进行分发.它允许我使用模拟器和iPhone设备的框架.但是,当我尝试将其发送到App Store时由于模拟器构建而失败.

Carthage提供了一个有趣的解决方案 它创建了一个适用于模拟器和iPhone的框架.但是当它是时候将它发送到App Store时,我们需要运行一个脚本来撕掉模拟器切片.

但是,DFP广告管理系统(DFP)的创建者已经找到了一种方法来创建适用于模拟器和设备的框架; 通过App Store提交; 并且不需要任何脚本来撕掉模拟器切片(AFAIK).我真正需要做的就是将GoogleMobileAds.framework文件拖入Linked Frameworks and Libraries.我不需要Embedded Binaries像大多数动态框架那样添加它,这有点令人惊讶)

我创建了一个使用DFP的示例项目来演示这一点.

// clone repository
git clone --recursive https://github.com/wh1pch81n/DoubleClickGoogleExample.git

// Move to correct branch
git submodule foreach 'git checkout master'
git submodule foreach 'git pull origin master' 
Run Code Online (Sandbox Code Playgroud)

现在您可以选择Simulation_mate方案并运行应用程序.该应用将在底部显示一个广告横幅,以显示广告实际正在运行.

依赖图看起来像这样.

Simulation_mate.app
   -> Mate.framework
      -> DFP.framework
         -> GoogleMobileAds.framework
Run Code Online (Sandbox Code Playgroud)

同样,我可以在模拟器,iPhone上运行Simulation_mate,并可以将其提交到App Store.

我的问题是,他们是如何创建这样的GoogleMobileAds.framework的?创建这样的框架需要遵循哪些步骤?

xcode frameworks objective-c ios swift

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

从XCAsset目录中获取数据

我知道要从资产目录中获取图像,我可以使用UIImage(名为:"fileName")来完成它.

但是,如果我从XCAsset目录中获取数据怎么办?我无法弄清楚这一点.

我试过了,

let url = NSBundle.mainBundle().URLForResource("fileName", withExtension: nil)
let data = NSData(contentsOfURL: url!)
Run Code Online (Sandbox Code Playgroud)

但它没有.我不知道如何从XCAssets目录中获取数据.如果有人可以帮助我(谷歌搜索没有帮助),请让我知道我会非常感激!

更新:

为什么我要从资产目录中获取数据?我将动画gif拖入资产目录.资产目录将其解释为DATA.这就是我试图从资产目录中获取数据的原因.

更新:这是我的Assets.xcassets文件夹的屏幕截图.

图片 它有一个名为"_Loading"的文件,在右边它被认为是"数据集".我不确定如何从Assets目录中获取数据集.

ios asset-catalog xcasset swift

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

如何在Swift中导入没有Xcode项目的模块

我正在使用命令行创建swift文件并使用"swift"命令来运行其中一个.但是,我希望一个文件能够从另一个文件访问函数.如果这是C,那么我可以使用#include宏并指定文件的位置.但斯威夫特的进口声明似乎并不允许这样.应该有办法,我想知道如何做到这一点.

例如:

如果我有一个包含函数的文件,然后我创建另一个使用该函数的文件.我如何允许它使用它?

// file1.swift
import Foundation

func sayHello() -> String {
    return "hello"
}

// file2.swift
import file1  // <-- trying to import file1 but it doesn't work

println(sayHello())
Run Code Online (Sandbox Code Playgroud)

一旦文件生成,我在终端写"swift file2.swift".但它告诉我..

error: no such module 'file1.swift'
Run Code Online (Sandbox Code Playgroud)

很明显,swift编译器正在寻找一个模块.如何将file1变为模块?我已经看到了一些解决方案,但它们都发生在Xcode中.我正在寻找的是在命令行中完成所有操作.

command-line module read-eval-print-loop swift

9
推荐指数
2
解决办法
1720
查看次数

Xcode代码覆盖:如何排除框架代码?

我有一个单元测试来测试我的目标应用程序.我的目标应用程序依赖于动态框架.

当代码覆盖率结果返回时,它会列出我的目标应用程序的代码覆盖率以及动态框架

我不想让动态框架给出代码覆盖.有可能排除它吗?

xcode unit-testing code-coverage swift3

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

如何在 swift 4 中使用 UnsafeMutablePointer

Objective-c 有一个指向指针的指针的概念。如果取消引用第一个指针,则可以访问原始指针

void makeFive(int *n) {
    *n = 5;
}

int n = 0;
makeFive(&n);
// n is now 5
Run Code Online (Sandbox Code Playgroud)

当它被桥接到 Swift 3 时,它变成了一个 UnsafeMutablePointer

func makeFive(_ n: UnsafeMutablePointer<Int>) {
    n.memory = 5
}
var n: Int = 0
makeFive(&n)
// n is now 5
Run Code Online (Sandbox Code Playgroud)

但是,从 Swift 4 开始,这种行为发生了变化,并且 memory 属性不再可用。

与 makeFive(_:) 函数等效的 swift 4 是什么?

更新 感谢 Hamish,我现在知道“记忆”已重命名为指针。

swift unsafemutablepointer swift4

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

如何将 Swift 函数存储在变量中

// Assume you have two functions.
// Swift considers these functions as distinct
func cars(left look: String) {}
func cars(right look: String) {}

// How can I store them in a variable for later use?
let c: (left : String) -> ()  = cars
let c2: (right : String) -> () = cars
Run Code Online (Sandbox Code Playgroud)

当我尝试将这些方法存储到变量中时,收到一条错误消息,指出“汽车”不明确。我可以做什么来区分它们?

polymorphism xcode closures ios swift

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