質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • Swift

    6997questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • C

    3557questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • iOS 9

    213questions

    iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

typedef struct..をswiftで

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 710

Naokit

score 11

typedef struct 
{
  int first;
  int second;
} IntPair;

IntPair directions[8] = {
  { -1, -1 }, {  0, -1 }, { 1, -1 }, 
  { -1,  0 },             { 1,  0 }, 
  { -1,  1 }, {  0,  1 }, { 1,  1 } 
};
上のコード(c言語)をswiftに書き換えたいのですが、上手くいきません。
どなたか教えてください。。。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

swiftの勉強がてら調べながら書いてみます。
最初は連想配列にしようかと思ったのですが、タプルというのがあったのでそれを使ってみました。
(連想配列については興味があればご自分で調べてみてください)

let directions = [
    ( -1, -1 ), (  0, -1 ), (  1, -1 ),
    ( -1,  0 ),             (  1,  0 ),
    ( -1,  1 ), (  0,  1 ), (  1,  1 ),
]

print( directions[2].0 )//directions[2].first
print( directions[2].1 )//directions[2].second

let (first, second) = directions[2]
print( first, second )

出力
1
-1
1 -1

動作確認はXcode7のPlaygroundで行いました。

【追記】
少し冗長になってしまいますが、連想配列のような感じで名前を付けられるようなので、それを使って書いてみます。

let directions = [
    ( first:-1, second:-1 ), ( first: 0, second:-1 ), ( first: 1, second:-1 ),
    ( first:-1, second: 0 ),                          ( first: 1, second: 0 ),
    ( first:-1, second: 1 ), ( first: 0, second: 1 ), ( first: 1, second: 1 ),
]

print( directions[2].first, directions[2].second )

出力
1 -1

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

いろいろな方法があるとおもいますが、3 つの方法で書いてみました。
   1. strunct とその配列にする。 (質問文の C でのコードにもっとも近い)
   2. Dictionary にする。
   3. Enum にする。

1. strunct とその配列にする。
イメージ説明2. Dictionary にする。
イメージ説明3. Enum にする。
イメージ説明
コード全体:
//: Playground - noun: a place where people can play
import UIKit
// ******* struct の配列として実装 **********
struct StDirection {
    var x:Int = 0
    var y:Int = 0
}
let Ds: Array<StDirection> = [
    StDirection(x:-1, y:1),  StDirection(x:0, y:1),  StDirection(x:1, y:1),
    StDirection(x:-1, y:0),                          StDirection(x:1, y:0),
    StDirection(x:-1, y:-1), StDirection(x:0, y:-1), StDirection(x:1, y:-1),
]
print(Ds[0])
print("x = \(Ds[0].x), y = \(Ds[0].y)")

// ******* 辞書として実装 ***********
let direction2: Dictionary<String, (x:Int, y:Int)> = [
    "LeftTop":    (-1, 1),  "CenterTop":    (0, 1),  "RightTop":    (1, 1),
    "LeftMiddle": (-1, 0),                           "RightMiddle": (1, 0),
    "LeftBottom": (-1, -1), "CenterBottom": (0, -1), "RightBottom": (1, -1)
]
print(direction2["LeftTop"])
let lt = "LeftTop"
print("x =\(direction2[lt]!.x), y =\(direction2[lt]!.y)")

// ******* enum として実装 **********
enum EnumDirections:Int {
    case LeftTop, CenterTop, RightTop,
         LeftMiddle, RightMiddle,
         LeftBottom, CenterBottom, RightBottom

    func vec() -> (x:Int, y:Int) {
        switch self {
        case .LeftTop:     return (x:-1, y: 1)
        case .CenterTop:   return (x: 0, y: 1)
        case .RightTop:    return (x: 1, y: 1)
        case .LeftMiddle:  return (x:-1, y: 0)
        case .RightMiddle: return (x: 1, y: 0)
        case .LeftBottom:  return (x:-1, y:-1)
        case .CenterBottom:return (x: 0, y:-1)
        case .RightBottom: return (x: 1, y:-1)
        }
    }
}
print(EnumDirections.LeftTop.vec())
print("\(EnumDirections.LeftTop.vec().x) , \(EnumDirections.LeftTop.vec().y)")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    swift tableViewのセル選択時の動作について

    セルにはあらかじめ配列partに入れたstring型の文字を表示しています。 この時セルを選択した時にそのセルの文字を配列passの文字に変えたいのですがこのプログラムではできま

  • 受付中

    構造体(Swift)の型について

    swiftにおける構造体の型?について質問です。 現在、swiftでiOSアプリを開発していて、documents配下のファイルパスを取得しようとした際、以下のような記載をす

  • 解決済

    Array index out of rangeの解決。

    前提・実現したいこと swiftでクイズアプリを作成しています。各問題では選択肢ボタンを押すと次の問題に移行するシステムにしています。時間制も設けており同じく制限時間を過ぎると次

  • 解決済

    [Swift] プロトコルで get set を指定したにもかかわらず set できない

     環境 Xcode 8.3.3 Swift 3.x  発生している問題 型がAny?で扱いにくいrepresentedObjectを扱いやすくるすため以下のようなプロト

  • 解決済

    swift3 2点間の座標から方向を求めるやり方

    はじめまして。今2点間の座標から現在地に対する目的地の方向を出したくあるコードを見つけたのですが、expected declarationのerrorが出てしまいます。 いったいど

  • 解決済

    Swift4 Codable-Decodeについて教えてください。

    OpenWeatherMapより以下のJSONデータを取得しました。 *******JSONデータ************************************** {

  • 解決済

    Swiftで多次元配列をソートしたい

    次の多次元配列を2つめの数字で昇順、降順にそれぞれ並び替えたいと考えています。 [ ["A", -10], ["B", 20], ["C", 10] ]

  • 受付中

    swiftのクラスと構造体

    swiftを勉強しているのですが,クラスと構造体についてわからない点があります. 関数aが関数bを呼び出す時に,関数bにクラスのインスタンスを引数として渡した場合,関数b内でク

同じタグがついた質問を見る

  • Swift

    6997questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • C

    3557questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • iOS 9

    213questions

    iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。